Java SPRING\u应用程序\u JSON环境变量未被SPRING boot识别
我是spring boot新手,有一个非常基本的错误,我显然有一个明显的错误。但我已经RTM’ed和文件,我遗漏了一点: tl/dr 如何使用@Value annotation从“spring环境”获取值 上下文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环境” 在应用程序“后处理上下文”中
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
试试这个