我遇到了一個有線問題,並且沒有找到任何提示。Spring PropertySources已加載但未在測試中應用
我正在處理與屬性文件的數據庫分片配置。 我得到了它有責任加載這些屬性的類:
@Component
@PropertySources(value = *arrayOf(
PropertySource("classpath:/dbconfig/base.properties"),
PropertySource("classpath:/dbconfig/override.properties", ignoreResourceNotFound = true)
))
@ConfigurationProperties("groups.datasource")
class DbConfig {
val base: List<DataSourceProperties> = ArrayList()
val override: List<DataSourceProperties> = ArrayList()
}
然後,我使用這個組件的配置類設置我datasrouces。
這裏是我的src/main /資源/ DBCONFIG/base.properties文件:
#Spring Boot Config for Oracle
# CENTRAL
groups.datasource.base[0].name=central
groups.datasource.base[0].url=jdbc:oracle:thin:@url:1530:sid
groups.datasource.base[0].username=user
groups.datasource.base[0].password=passwd
groups.datasource.base[0].driver=class name=oracle.jdbc.driver.OracleDriver
而且我的src /測試/資源/ DBCONFIG/override.properties文件:
#Spring Boot Config for Oracle
# PREPROD
groups.base.override[1].name=preprod
groups.base.override[1].url=jdbc:oracle:thin:@user:1542:sid
groups.base.override[1].username=user
groups.base.override[1].password=passwd
groups.base.override[1].driver=class name=oracle.jdbc.driver.OracleDriver
而且這裏是我的測試類:
@RunWith(SpringJUnit4ClassRunner::class)
@SpringBootTest(classes = arrayOf(DatabaseComponent::class))
open class DatabaseComponentTest {
@Autowired
lateinit var env: Environment
@Test
fun testBaseConfiguration() {
assert(env.getProperty("groups.datasource.base[0].name") == "central")
assert(env.getProperty("groups.datasource.base[0].url") == "jdbc:oracle:thin:@url:1530:sid")
assert(env.getProperty("groups.datasource.base[0].username") == "user")
assert(env.getProperty("groups.datasource.base[0].password") == "passwd")
assert(env.getProperty("groups.datasource.base[0].driver") == "class name=oracle.jdbc.driver.OracleDriver")
}
@Test
fun testOverrideConfiguration() {
assert(env.getProperty("groups.datasource.override[0].name") == "preprod")
assert(env.getProperty("groups.datasource.override[0].url") == "jdbc:oracle:thin:@url:1542:sid")
assert(env.getProperty("groups.datasource.override[0].username") == "user")
assert(env.getProperty("groups.datasource.override[0].password") == "passwd")
assert(env.getProperty("groups.datasource.override[0].driver") == "class name=oracle.jdbc.driver.OracleDriver")
}
}
在調試模式下,當我查看classLoader時,文件override.properties似乎充滿了他所有的價值。
另外,testBaseConfiguration確實有效,並聲明爲true。 雖然,testOverrideConfiguration不,並且聲明爲false。另一件事,所有這些行爲在Spring模塊中運行良好,覆蓋在這裏並加載。我的問題只是針對我的測試案例。
任何想法我做錯了什麼?
編輯1:這裏是DataBaseComponent:
@Configuration
@EnableAutoConfiguration
@ComponentScan
open class DatabaseComponent
我也把我的代碼在GitHub上:https://github.com/romainbsl/spring-database-sharding
你能共享DatabaseComponent源代碼替換[0]? – chomnoue
好吧,我用代碼和github鏈接編輯我的帖子 – romainbsl