问题
Spring整合Mybatis在项目启动时出现如下异常:
java.sql.SQLException: ${jdbcdriver}
at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:550)
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1758)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1695)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 86 more
代码:
@Configuration @PropertySource("classpath:config.properties") @ComponentScan(value="com.tm",excludeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class})}) @EnableTransactionManagement//启动事务管理 public class AppRootConfig { @Bean(value="druidDataSource",initMethod="init",destroyMethod="close") public DruidDataSource getDataSource( @Value("${jdbcdriver}")String driver, @Value("${jdbcurl}")String url, @Value("${jdbcuser}")String user, @Value("${jdbcpassword}")String password ){ DruidDataSource ds=new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(user); ds.setPassword(password); return ds; }
我也用了spring整合shiro安全框架,spring不能读取properties文件,因为spring默认读取单个properties文件,但是shiro有内置的properties文件,当spring扫描到shiro里面的properties文件
后不再读取其他的properties文件.要想让spring支持多个properties文件,需要添加一个对象
PropertySourcesPlaceholderConfigurer
解决方法:
@Configuration @PropertySource("classpath:config.properties") @ComponentScan(value="com.jt",excludeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class})}) @EnableTransactionManagement//启动事务管理 public class AppRootConfig { /** * 启动此对象可以加载多个properties文件 * @return */ @Bean public PropertySourcesPlaceholderConfigurer newPropertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer(); } //配置Druid @Bean(value="druidDataSource",initMethod="init",destroyMethod="close") public DruidDataSource getDataSource( @Value("${jdbcdriver}")String driver, @Value("${jdbcurl}")String url, @Value("${jdbcuser}")String user, @Value("${jdbcpassword}")String password ){ DruidDataSource ds=new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(user); ds.setPassword(password); return ds; }