Currently I am setting database connection information in the application.yaml
file. For production deployment I need to read the database connection string from file.
in Gitter I got the tip to use micronaut.config.files
value, but its not working.
I defined DB connection values in dbinfo.properties
file, then update build.gradle
file to like this.
run {
environment('micronaut.environments','dev')
environment 'micronaut.config.files', 'C:\\shared\\application.dev.properties'
}
in application.yaml
dataSource:
url: ${DBURL}
dbCreate: create-update
pooled: true
jmxExport: true
driverClassName: com.mysql.cj.jdbc.Driver
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
username: ${DBUSER}
password: ${DBPASSWORD}
when I run its giving below error message.
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [org.grails.orm.hibernate.HibernateDatastore]: Could not resolve placeholder ${DBURL} in value: ${DBURL}
Is there an example code to read data base connection string from file Micronaut Groovy code?
Thanks
SR
Update: 2/26/19
I updated build.gradle
file like this still same error.
run {
systemProperty('micronaut.environments','dev')
systemProperty('micronaut.config.files', 'C:\\shared\\application.dev.properties')
}
from Application.grooy
file
class Application {
static void main(String[] args) {
String filename=System.properties['micronaut.config.files']
File f= new File(filename)
if( f.exists()){
println "File found: $filename"
println f.text
} else{
println "file not found : $filename"
}
Micronaut.run(Application)
}
}
Error message
19:31:49.925 [main] INFO i.m.context.env.DefaultEnvironment - Established active environments: [dev]
19:31:50.700 [main] INFO i.m.c.h.g.HibernateDatastoreFactory - Starting GORM for Hibernate
19:31:50.925 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [org.grails.orm.hibernate.HibernateDatastore] could not be loaded: Error instantiating bean of type [org.grails.orm.hibernate.HibernateDatastore]: Could not resolve placeholder ${DBURL} in value: ${DBURL}
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [org.grails.orm.hibernate.HibernateDatastore] could not be loaded: Error instantiating bean of type [org.grails.orm.hibernate.HibernateDatastore]: Could not resolve placeholder ${DBURL} in value: ${DBURL}
at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1040)
at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:201)
at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2034)
at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:156)
at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:143)
at io.micronaut.runtime.Micronaut.start(Micronaut.java:67)
at io.micronaut.runtime.Micronaut.run(Micronaut.java:274)
at io.micronaut.runtime.Micronaut.run(Micronaut.java:260)
at webapp.Application.main(Application.groovy:30)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [org.grails.orm.hibernate.HibernateDatastore]: Could not resolve placeholder ${DBURL} in value: ${DBURL}
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1335)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:1543)
at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1038)
... 8 common frames omitted
Caused by: io.micronaut.context.exceptions.ConfigurationException: Could not resolve placeholder ${DBURL} in value: ${DBURL}
You're confusing environment variables with system properties
run {
systemProperty('micronaut.environments','dev')
systemProperty('micronaut.config.files', 'C:\\shared\\application.dev.properties')
}
EDIT: The above will cause the file to be a property source in the application, however it won't supply environment variables like DBURL. It doesn't make sense to attempt to use a configuration file to supply those values.
Either supply those values with environment variables directly, or remove the values from config and allow the imported configuration file to provide them.
For example, remove dataSource.url
from application.yml
and then set dataSource.url=someurl
in C:\\shared\\application.dev.properties