由于springboot使用
mssql-jdbc
或者sqljdbc4
连接sqlserver2005
时会报
提示以下信息:
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“Unexpected rethrowing”
搜遍百度上的方法都是改jre的加密信息,但这种方式存在比较大的缺陷,开发环境和生产环境都需要更改jre,这样非常不友好
后面查到可以使用jtds
连接sqlserver2005
,重点是不会有SSL的报错信息,且不需要更改东西
首选说明的是springboot的自动配置是兼容jtds,直接配置就可以
这里说的是多数据源环境下的配置方式
# application.yml
spring:
datasource:
test:
url: jdbc:sqlserver://localhost:1433;DatabaseName=aDirectory
driverclassname: com.microsoft.sqlserver.jdbc.SQLServerDriver
password: test
username: test
mapperLocations: classpath:mapper/ad/*.xml
public class SqlSessionFactoryUtils {
public static DataSource dataSource(String driverClassName,String url,String username,String password){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driverClassName);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
public static DataSourceTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
return dataSourceTransactionManager;
}
public static SqlSessionFactory getSqlSessionFactory(DataSource dataSource,String mapperLocations) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
return factoryBean.getObject();
}
}
@Configuration
@MapperScan(basePackages = "com.kj.modules.test.mapper", sqlSessionFactoryRef = "testSqlSessionFactory")
public class AdDbConfig {
@Value("${spring.datasource.test.url}")
private String url;
@Value("${spring.datasource.test.driverclassname}")
private String driverClassName;
@Value("${spring.datasource.test.username}")
private String username;
@Value("${spring.datasource.test.password}")
private String password;
@Value("${spring.datasource.test.mapperLocations}")
private String mapperLocations;
@Bean(name = "testDataSource")
@Primary
public DataSource dataSource() {
return SqlSessionFactoryUtils.dataSource(driverClassName,url,username,password);
}
@Bean("testTractional")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("testDataSource") DataSource dataSource) {
return SqlSessionFactoryUtils.transactionManager(dataSource);
}
@Bean(name = "testSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception {
return SqlSessionFactoryUtils.getSqlSessionFactory(dataSource,mapperLocations);
}
}
如果现在直接运行的话也会报错
由于net.sourceforge.jtds.jdbc.JtdsConnection沒有實現isValid(),所以运行就会报错
所以需要指定一个连接测试查询
在dataSource方法下增加连接测试,最后改成以下的
public static DataSource dataSource(String driverClassName,String url,String username,String password){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driverClassName);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setValidationQuery("select 1");
return druidDataSource;
}