Java SPRING\u应用程序\u JSON环境变量未被SPRING boot识别

Java SPRING\u应用程序\u JSON环境变量未被SPRING boot识别,java,spring-boot,environment-variables,Java,Spring Boot,Environment Variables,我是spring boot新手,有一个非常基本的错误,我显然有一个明显的错误。但我已经RTM’ed和文件,我遗漏了一点: tl/dr 如何使用@Value annotation从“spring环境”获取值 上下文 springBootVersion = '1.4.2.RELEASE' 我希望: 使用环境变量spring\u application\u JSON将“jdbc info”(例如url/password/login)传递给应用程序/“spring环境” 在应用程序“后处理上下文”中

我是spring boot新手,有一个非常基本的错误,我显然有一个明显的错误。但我已经RTM’ed和文件,我遗漏了一点:

tl/dr

如何使用@Value annotation从“spring环境”获取值

上下文

springBootVersion = '1.4.2.RELEASE'
我希望:

  • 使用环境变量spring\u application\u JSON将“jdbc info”(例如url/password/login)传递给应用程序/“spring环境”
  • 在应用程序“后处理上下文”中使用此jdbc信息为jdbc jndi设置url/creds/etc
问题

  • 我已经设置了环境变量SPRING\u APPLICATION\u JSON,但SPRING boot似乎并没有“拾取它”
调用程序示例

这两种方法都失败了:

SPRING_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 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");
   }
我试过这个:

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

   @Autowired
   Environment fEnvironment;
环境

springBootVersion = '1.4.2.RELEASE'
参考

提前感谢

这对我很有用:

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

最终的答案是从“基于jndi的db连接”切换到“SpringJDBC模板”。然后SpringJDBC自动获取spring_应用程序_JSON设置,而不需要下面的任何“额外类”

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

DB连接配置类

@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");
   }
应用程序类

@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;
   }

在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

试试这个