使用spring属性创建自己的DataSource

时间:2016-12-06 09:23:32

标签: java spring spring-mvc properties kotlin

我试图从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())。

现在出现的问题是我的属性urlusernamepassword未初始化。

有没有办法解决properties(不对所有初始化/类使用@Autowired。)

我唯一想要的是从该文件中读取属性并使用它们,而不是寻找' Spring最佳实践' 但是要寻找解决方案

1 个答案:

答案 0 :(得分:0)

有一个@Configuration类,其中包含Datasource的初始化,并将这些属性注入其中,然后在所有DAO中自动连接该数据源bean。因此,您不必在DAO中注入这些属性值。