Java Spring引导未从属性文件读取
我尝试了web上的每个选项,但无法使用以下方法设置值:Java Spring引导未从属性文件读取,java,spring,spring-boot,Java,Spring,Spring Boot,我尝试了web上的每个选项,但无法使用以下方法设置值: @Configuration @PropertySource("classpath:application.properties") public class MyDataSource { @Value("${db.driver}") private String DB_DRIVER; @Value("${db.url}") private String DB_URL; @Value("${db
@Configuration
@PropertySource("classpath:application.properties")
public class MyDataSource {
@Value("${db.driver}")
private String DB_DRIVER;
@Value("${db.url}")
private String DB_URL;
@Value("${db.username}")
private String DB_USERNAME;
@Value("${db.password}")
private String DB_PASSWORD;
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(DB_DRIVER);
dataSource.setUrl(DB_URL);
dataSource.setUsername(DB_USERNAME);
dataSource.setPassword(DB_PASSWORD);
return dataSource;
}
}
My application.properties位于main/resources文件夹中,可以在调试模式下的变量中看到值。但在正在运行的应用程序上,它显示属性“”不能为空
编辑:我不确定在第一种情况下会出现什么问题?
因此,按照建议更改了application.property文件,代码如下:
@Autowired
protected JdbcTemplate jdbcTemp;
public List<> getData(String id) {
return jdbcTemp.query("SELECT ........,new RowMapper());
}
但是获取java.lang.NullPointerException:如果您使用的是Spring Boot,您可以通过声明一些条目来利用application.properties文件:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
这样,就不需要实现@Configuration类来在SpringBoot中设置数据库连接
您可以在此处进一步了解:
顺便说一句,看看java配置的,使用环境实例获取属性似乎是首选方法,因为默认情况下,${..}占位符不会被解析 您可以使用类似以下内容:
@Autowired
private Environment env;
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("db.driver");
.....
return dataSource;
}
原因来自:
这是不一致的@PropertySource是ConfigurableEnvironmentaddPropertySource的声明性对应项。我们没有添加一个
在后一种情况下,它将
在前者中这样做是不一致的。这将不是用户想要的
在任何情况下,甚至在大多数情况下都适用。
这是完全可能的,甚至建议@Configuration类用户完全放弃${…}属性替换,以支持
EnvironmentgetProperty在@Bean方法中查找。对于用户
根据这项建议,自动注册
PropertySorucesPlaceholderConfigurer在被发现时会感到困惑,
而且通常不受欢迎,因为它是另一个运动部件。是的,是的
存在是良性的,但不是免费的。PSPC必须访问每个bean
定义在容器中查询PropertyValue,只做
在用户使用
EnvironmentgetProperty方法。
这是可以解决的,并且已经通过文档解决了。正确使用@PropertySource、PropertySourcesplaceConfigurer和其他
组件在Javadoc中有相当全面的文档记录
@配置已经完成,参考文档即将发布。
我在尝试从MySQL切换到MSSQL时也遇到了错误。实际的问题是我忘记将MSSQL依赖项放在服务中。我使用了mssql jdbc您应该从应用程序配置数据源。属性没有得到您的支持。是的,我的数据源属性在application.properties中。但我无法将它们移植到上面的getDatSorce方法中。请尝试从WebMVCConfigureAdapter扩展MyDataSource类。加上添加EnableWebMvc注释并添加方法@Override public void addResourceHandlers最终ResourceHandlerRegistry注册表{registry.addResourceHandler/resources/**.addResourceLocations/resources/;registry.setOrderOrdered.HIGHEST_priority;}你正在使用SpringBoot,那你为什么还要自己做这些事情呢?Spring Boot已经做到了这一点,您基本上是在努力不使用Spring Boot。对于Spring Boot来说,情况并非如此,因为它自动配置了PropertySourcesPlaceholderConfigurer,所以默认情况下会解析${…}占位符。如果您的意思是不需要PropertySourcesPlaceholderConfigurer,是的,我将获得${…}中的值。但是我不能在bean getDataSource中使用它们?我一直在强调的一点是,您可能会切换到env.getProperty而不是${..}。