【问题标题】:Micronaut Read data base connection string from file Groovy codeMicronaut 从文件 Groovy 代码中读取数据库连接字符串
【发布时间】:2019-02-26 02:28:34
【问题描述】:

目前我正在application.yaml 文件中设置数据库连接信息。对于生产部署,我需要从文件中读取数据库连接字符串。

在 Gitter 中,我得到了使用 micronaut.config.files 值的提示,但它不起作用。

我在dbinfo.properties 文件中定义了数据库连接值,然后将build.gradle 文件更新为这样。

run {
    environment('micronaut.environments','dev')
    environment 'micronaut.config.files', 'C:\\shared\\application.dev.properties'    
}

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}

当我运行它时给出以下错误消息。

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}

是否有从文件 Micronaut Groovy 代码中读取数据库连接字符串的示例代码?

谢谢

SR

更新:2/26/19

我更新了build.gradle 文件,同样的错误。

run {
    systemProperty('micronaut.environments','dev')
    systemProperty('micronaut.config.files', 'C:\\shared\\application.dev.properties')
}

来自Application.grooy 文件

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)
    }
}

错误信息

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}

【问题讨论】:

    标签: micronaut


    【解决方案1】:

    您将环境变量与系统属性混淆

    run {
        systemProperty('micronaut.environments','dev')
        systemProperty('micronaut.config.files', 'C:\\shared\\application.dev.properties')  
    }
    

    编辑:以上将导致文件成为应用程序中的属性源,但它不会提供 DBURL 等环境变量。尝试使用配置文件来提供这些值是没有意义的。

    要么直接为这些值提供环境变量,要么从配置中删除这些值并允许导入的配置文件提供它们。

    例如,从application.yml 中删除dataSource.url,然后在C:\\shared\\application.dev.properties 中设置dataSource.url=someurl

    【讨论】:

    • 更新了 gradle 文件,仍然没有获取 DBURL 值,有什么提示吗?
    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2019-06-21
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多