2016-12-06 4 views
0

J'essaye de créer mon propreDataSource du application-prod.properties.Créer propre DataSource avec des propriétés de ressort

Maintenant, je sais que mon application.properties est lu, car il ne capte le prod profil actif (indiqué dans la console)

Dans mon application-prod.properties j'ai les suivantes:

jdbc.url=jdbc:postgresql://localhost:5432/myDb 
jdbc.username=root 
jdbc.password=root 
jdbc.driverClassName=org.postgresql.Driver 

Maintenant, si je change la préfixe, ma console lance une erreur de compilation Could not resolve Spring property placholder qui a du sens. Cela montre également que le compilateur vérifie si le @Value existe dans le fichier 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) 
    } 
} 

Maintenant, comme vous pouvez le voir, j'essayé passer le @Value dans le constructeur. Mais puisque je extend le BaseDAO dans toutes mes classes, il s'est plaint du constructeur étant vide (class SomeDAO : BaseDAO()).

Le problème qui se produit maintenant est que mes propriétés url, username et password ne sont pas en cours d'initialisation.


est-il un moyen de résoudre le properties (sans l'utilisation de @Autowired sur tous les initialisations/classes.)

La seule chose que je veux est de lire les propriétés de ce fichier et les utiliser, non à la recherche d'« meilleures pratiques de printemps » mais pour une solution

Répondre

0

ont une classe de @Configuration qui contient pour l'initialisation avec les propriétés dataSource injectées dans et puis auto-fil qui datasource bean dans tous vos DAO. De ce fait, vous n'avez pas besoin d'injecter ces valeurs de propriété dans les DAO.

+0

Mais est-ce que cela résoudrait le problème que '@ Value' ne règle pas la variable? – Ivaro18