spring\u application\u json环境变量未被spring boot识别

sh7euo9m  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(198)

我对springboot还不熟悉,有一个非常基本的错误,我显然有一个明显的错误。但我已经和医生联系过了,我遗漏了一点:
tl/dr公司
如何使用@value annotation从“spring环境”获取值?
上下文
我寻求:
使用环境变量spring\u application\u json将“jdbc info”(例如url/password/login)传递给应用程序/“spring environment”
在应用程序“post process context”中使用此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

-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-功能外部配置与值
提前谢谢

fquxozlt

fquxozlt1#

这对我很有用:

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

xxslljrj2#

最终的答案是从“基于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");
   }

应用程序类
与此一起:

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

相关问题