@ComponentScan
@EnableAutoConfiguration
@PropertySource(value = { "file:/Users/Documents/workspace/application.properties" })
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
在这种情况下,它在部署时提供:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.jdbc.core.JdbcTemplate] found for dependency:
无法找到外部化应用程序属性文件的正确方法
我尝试了正确加载的自动装配环境变量,但后来我需要手动定义所有的bean
@Bean
public JdbcTemplate dataSource() {
String driverClassName = env
.getProperty("spring.datasource.driverClassName");
String dsUrl = env.getProperty("spring.datasource.url");
String username = env.getProperty("spring.datasource.username");
String password = env.getProperty("spring.datasource.password");
//DataSource dataSource = new SimpleDriverDataSource(new driverClassName, dsUrl, username, password);
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
return jdbc;
}
这部署时没有抛出错误但没有响应。
答案 0 :(得分:1)
如果您正在向Tomcat部署WAR,那么您需要按照此处所述定义上下文XML:https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Defining_a_context
例如,如果您有http://localhost:8080/my-app/,通常会定义$ CATALINA_BASE / conf / Catalina / localhost / my-app.xml。
该文件将如下所示:
<Context docBase='path/to/my-app/my-app.war'>
<Environment name='app_config_dir' value='path/to/my-app/' type='java.lang.String'/>
</Context>
在您的代码中,实现ApplicationContextAware并覆盖setApplicationContext。这是一个例子:
public class Setup implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
log.info("Set application context. App Config Property: {}",applicationContext.getEnvironment().getProperty("app_config_dir"));
}
}
您现在可以从app_config_dir
加载属性文件。
答案 1 :(得分:0)
无需使用@PropertySource
注释来定义它。您应该使用spring.config.location
属性来设置application.properties
位置。可以在命令行中设置该属性:
java -jar myapp.jar --spring.config.location=/Users/Documents/workspace/
答案 2 :(得分:0)
您可以定义一个名为SPRING_CONFIG_LOCATION
的环境变量,并为其指定一个值,该值可以是文件夹(应以/
结尾)或文件。在任何情况下,该位置都应以file:
:
SPRING_CONFIG_LOCATION = file:C:/workspace/application.properties
或
SPRING_CONFIG_LOCATION = file:C:/workspace/
有关此here的更多信息。
答案 3 :(得分:0)
您也可以使用@PropertySource
,因为在将应用程序作为war文件部署到tomcat时它很有用。
@PropertySource
无效,因为您缺少@Configuration
注释。根据{{3}}文档,您的@PropertySource
类应该有@Configuration
个注释。
以下作品
@Configuration
@ComponentScan
@EnableAutoConfiguration
@PropertySource(value = { "file:/Users/Documents/workspace/application.properties" })
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
您还可以加载多个属性文件。例如:
@PropertySource(value = {"classpath:application.properties", "file:/Users/overriding.propertis"}, ignoreResourceNotFound = true)
请注意,声明文件的顺序很重要。如果在两个或多个文件中定义了相同的键,则与最后声明的文件中的键关联的值将覆盖任何先前的值。