当前位置: 首页 > 工具软件 > jTDS > 使用案例 >

springboot集成jtds

齐运诚
2023-12-01

springboot集成jtds

由于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

SqlSessionFactoryUtils工具类

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(),所以运行就会报错
所以需要指定一个连接测试查询

更改 SqlSessionFactoryUtils

在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;
}
 类似资料: