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

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

我对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看起来并没有“接受”
调用程序示例
这两个都失败了:

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

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

示例用法
下面是尝试访问的类:

  1. @Component
  2. public class DbInfo
  3. {
  4. @Value("${spring.datasource.url}")
  5. String fUrl;

请注意,我没有任何“propertysource资料”。我最初以为我会免费得到它。
错误
无法解析字符串值“${spring.datasource.url}”中的占位符“spring.datasource.url”
我也试过这个
我试过这个:

  1. @Configuration
  2. @PropertySource({
  3. "classpath:application.properties",
  4. })
  5. public class MyDbInfo
  6. {
  7. @Autowired
  8. Environment fEnvironment;

环境

  1. springBootVersion = '1.4.2.RELEASE'

参考
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-功能外部配置与值
提前谢谢

fquxozlt

fquxozlt1#

这对我很有用:

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

xxslljrj2#

最终的答案是从“基于jndi的db连接”切换到“springjdbc模板”。然后springjdbc自动获取spring应用程序的json设置,而不需要下面的任何“额外类”。
然而,在此切换之前,下面的代码解决了这个问题。可能有一种不那么冗长的方法。
db连接配置类

  1. @Configuration
  2. @PropertySource({
  3. "classpath:application.properties",
  4. })
  5. public class DbConnectionInfo
  6. {
  7. /**
  8. * Db connection info
  9. */
  10. @Configuration
  11. @PropertySource({
  12. "classpath:application.properties",
  13. })
  14. public class DbConnectionInfo
  15. {
  16. private Environment fEnvironment;
  17. @Autowired
  18. public DbConnectionInfo(Environment pEnvironment)
  19. {
  20. fEnvironment = pEnvironment;
  21. }
  22. public String getUrl()
  23. {
  24. return fEnvironment.getProperty("spring.datasource.url");
  25. }

应用程序类
与此一起:

  1. @SpringBootApplication
  2. public class Application {
  3. /**
  4. * Db connection info
  5. */
  6. private DbConnectionInfo fDbInfo;
  7. /**
  8. * Constructor. Mark as autowired so spring injects DbInfo
  9. * @param pDbConnectionInfo
  10. */
  11. @Autowired
  12. public Application(DbConnectionInfo pDbConnectionInfo)
  13. {
  14. fDbInfo= pDbConnectionInfo;
  15. }
展开查看全部

相关问题