我试图从DataSource
创建拥有 application-prod.properties
。
现在我知道我的application.properties
被读取了,因为它确实选择了prod
有效个人资料(在控制台中显示)
在我application-prod.properties
我有以下内容:
jdbc.url=jdbc:postgresql://localhost:5432/myDb
jdbc.username=root
jdbc.password=root
jdbc.driverClassName=org.postgresql.Driver
现在,如果我更改前缀,我的控制台会抛出编译时错误Could not resolve Spring property placholder
,这是有道理的。这也表明编译器实际上正在检查@Value
文件中是否存在properties
。
@Component
open class BaseDAO(
//@Value("\${jdbc.url}") private val url: String,
//@Value("\${jdbc.username}") private val username: String,
//@Value("\${jdbc.password}") private val password: String
) {
@Value("\${jdbc.url}")
lateinit open var url: String
@Value("\${jdbc.username}")
lateinit open var username: String
@Value("\${jdbc.password}")
lateinit open var password: String
lateinit open public var datasource: DataSource;
open fun getDs(): DataSource {
return HikariCP.init(name="pool1", url = url, username = username, password = password)
}
}
现在您可以看到我尝试在构造函数中传递@Value
。但是由于我extend
在我的所有类中BaseDAO
,它抱怨构造函数为空(class SomeDAO : BaseDAO()
)。
现在出现的问题是我的属性url
,username
和password
未初始化。
有没有办法解决properties
(不对所有初始化/类使用@Autowired
。)
我唯一想要的是从该文件中读取属性并使用它们,而不是寻找' Spring最佳实践' 但是要寻找解决方案
答案 0 :(得分:0)
有一个@Configuration类,其中包含Datasource的初始化,并将这些属性注入其中,然后在所有DAO中自动连接该数据源bean。因此,您不必在DAO中注入这些属性值。