返回信息流最近打算用spring做一个项目,然后打算使用java config来配置所有文件。但是在使用@PropertySource注解时总是返回null?不知道为什么?以下为代码:
package com.tsingjia.configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.tsingjia.common.base.BaseEntity;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.io.IOException;
/**
* 持久层配置类
*
*
*/
@Configuration
//@ComponentScan(basePackages = {"com.tsingjia.service"})
@PropertySource(value = "classpath:tsingjia.properties", ignoreResourceNotFound = true)
public class PersistenceConfig {
private static final String DEFAULT_DB_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DEFAULT_DB_URL = "jdbc:mysql://127.0.0.1:3306/tsingjia?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";
private static final String DEFAULT_DB_USERNAME = "tsingjia";
private static final String DEFAULT_DB_PWD = "tsingjia";
@Autowired
Environment environment;
@Value("${db.driver}")
String DB_DRIVER;
@Value("${db.url}")
String DB_URL;
@Value("${db.username}")
String DB_USERNAME;
@Value("${db.pwd}")
String DB_PWD;
@Bean
public static PropertySourcesPlaceholderConfigurer gpropertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
// configurer.setLocation(new ClassPathResource("tsingjia.properties"));
// configurer.setIgnoreResourceNotFound(true);
// configurer.setIgnoreUnresolvablePlaceholders(true);
return configurer;
}
/**
* 获取数据源
*
* @return
*/
@Bean(name = "dataSource")
public DataSource getDataSource() {
System.out.println("[测试代码]" + String.format("%s, %s, %s, %s", DB_DRIVER, DB_URL, DB_USERNAME, DB_PWD)+", "+environment);
DruidDataSource dataSource = new DruidDataSource();
// dataSource.setDriverClassName(environment.getProperty("db.driver", DEFAULT_DB_DRIVER));
// dataSource.setUrl(environment.getProperty("db.url", DEFAULT_DB_URL));
// dataSource.setUsername(environment.getProperty("db.username", DEFAULT_DB_USERNAME));
// dataSource.setPassword(environment.getProperty("db.pwd", DEFAULT_DB_PWD));
dataSource.setDriverClassName(DEFAULT_DB_DRIVER);
dataSource.setUrl(DEFAULT_DB_URL);
dataSource.setUsername(DEFAULT_DB_USERNAME);
dataSource.setPassword(DEFAULT_DB_PWD);
return dataSource;
}
@PostConstruct
@Bean
public String test(){
System.out.println("[测试代码]" + String.format("%s, %s, %s, %s", DB_DRIVER, DB_URL, DB_USERNAME, DB_PWD)+", "+environment);
return "tet";
}
/**
* 获取会话工厂对象
*
* @param dataSource 数据源
* @return
* @throws IOException
*/
@Autowired
@Bean(name = "sqlSessionFactory")
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 设置实体类的别名
factoryBean.setTypeAliasesPackage("com.happy.chat.entity");
// 设置实体类的父类
factoryBean.setTypeAliasesSuperType(BaseEntity.class);
// 设置mapper文件位置
factoryBean.setMapperLocations(resolver.getResources("classpath*:/mapper/*Mapper.xml"));
// 设置mybatis的配置文件
factoryBean.setConfigLocation(resolver.getResource("classpath:mybatis-config.xml"));
return factoryBean;
}
/**
* 扫描dao接口配置类对象
*
* @return
*/
@Bean(name = "mapperScannerConfigurer")
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
// 会话工厂的bean名称
configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
// dao接口所在包
configurer.setBasePackage("com.happy.chat.dao");
return configurer;
}
/**
* 声明spring的事务管理bean
*
* @param dataSource 数据源
* @return
*/
@Autowired
@Bean(name = "transactionManager")
public DataSourceTransactionManager getTransactionManager(DataSource dataSource) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
我在@controller注解的类前如果加上@propertysource注解的话,则显示environment不为null值,但是在@configuration注解的类中就不行,不知道为什么?跪求各位大神赐教。
这是一条镜像帖。来源:北邮人论坛 / java / #58314同步于 2017/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【问题】spring5 @property注解使用 null问题
happy3014
2017/12/9镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
去掉 placerholderconfig 这个bean ,会和注解那个冲突
【 在 happy3014 (happy3014) 的大作中提到: 】
: 最近打算用spring做一个项目,然后打算使用java config来配置所有文件。但是在使用@PropertySource注解时总是返回null?不知道为什么?以下为代码:
: package com.tsingjia.configuration;
: import com.alibaba.druid.pool.DruidDataSource;
: ...................
通过『我邮2.0』发布