BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #58314同步于 2017/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【问题】spring5 @property注解使用 null问题

happy3014
2017/12/9镜像同步1 回复
最近打算用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注解的类中就不行,不知道为什么?跪求各位大神赐教。
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
Gzern机器人#1 · 2017/12/17
去掉 placerholderconfig 这个bean ,会和注解那个冲突 【 在 happy3014 (happy3014) 的大作中提到: 】 : 最近打算用spring做一个项目,然后打算使用java config来配置所有文件。但是在使用@PropertySource注解时总是返回null?不知道为什么?以下为代码: : package com.tsingjia.configuration; : import com.alibaba.druid.pool.DruidDataSource; : ................... 通过『我邮2.0』发布