Spring引导无法识别SPRING_APPLICATION_JSON环境变量

时间:2017-01-03 15:24:48

标签: java spring-boot environment-variables

我是春季启动的新手并且有一个基本的错误,我显然有一个明显的错误。但我已经RTM和文档,并且错过了一点:

TL / DR

如何使用@Value注释从“弹簧环境”中获取值?

上下文

我寻求:

  • 使用环境变量SPRING_APPLICATION_JSON
  • 将'jdbc info'(例如,url / password / login)传递给应用程序/“spring环境”
  • 在应用程序'post process context'中使用此jdbc信息为jdbc jndi设置url / creds / etc

问题

  • 我设置了环境变量SPRING_APPLICATION_JSON,但是春季启动似乎没有“捡起来”

示例调用程序

这两个都失败了:

SPRING_APPLICATION_JSON='{"spring": {"datasource": { "url":"jdbc:mysql://localhost:3306/myapp", "username":"myappuser", "password":"mypassword" } } }' java -jar build/libs/myapp_springboot.war  

-Dspring.application.json='{"spring": {"datasource": { "url":"jdbc:mysql://localhost:3306/myapp", "username":"myappuser", "password":"mypassword" } } }' java -jar build/libs/myapp_springboot.war  

使用示例

以下是尝试访问的类:

@Component
public class DbInfo
{  
   @Value("${spring.datasource.url}")
   String fUrl;

请注意,我没有任何“PropertySource内容”。我最初认为我会免费获得。

错误

  

无法在字符串值中解析占位符'spring.datasource.url'   “$ {spring.datasource.url}”

也尝试了这个

我试过这个:

@Configuration
@PropertySource({
        "classpath:application.properties",
})
public class MyDbInfo
{

   @Autowired
   Environment fEnvironment;

环境

springBootVersion = '1.4.2.RELEASE'

参考

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-vs-value

提前致谢

3 个答案:

答案 0 :(得分:1)

这对我有用:

@Value("#{environment['spring.datasource.url']}")
private String url;

答案 1 :(得分:0)

最终的答案是从基于jndi的数据库连接切换到#34; to" spring jdbc template"。然后spring-jdbc自动获取SPRING_APPLICATION_JSON设置,而没有任何额外的类'下方。

然而,在此切换之前,下面的代码已经解决了问题。这可能是一种不那么冗长的方式。

数据库连接配置类

@Configuration
@PropertySource({
        "classpath:application.properties",
})
public class DbConnectionInfo
{
/**
 * Db connection info
 */
@Configuration
@PropertySource({
        "classpath:application.properties",
})
public class DbConnectionInfo
{

   private Environment fEnvironment;

   @Autowired
   public DbConnectionInfo(Environment pEnvironment)
   {
      fEnvironment = pEnvironment;
   }

  public String getUrl()
   {
      return fEnvironment.getProperty("spring.datasource.url");
   }

申请类

与此同时:

@SpringBootApplication
public class Application {

   /**
    * Db connection info
    */
   private DbConnectionInfo fDbInfo;


   /**
    * Constructor. Mark as autowired so spring injects DbInfo
    * @param pDbConnectionInfo
    */
   @Autowired
   public Application(DbConnectionInfo pDbConnectionInfo)
   {
      fDbInfo= pDbConnectionInfo;
   }

答案 2 :(得分:0)

在 windows cmd 中,这些格式有效:

//no single quote
set SPRING_APPLICATION_JSON={"my"":{"AAAA":"test"}}
java  -jar app.jar

//escape quote
java -Dspring.application.json={\"my\":{\"AAAA\":\"test\"}} -jar app.jar