if (this.dbType == null || this.dbType.length() == 0) { this.dbType = JdbcUtils.getDbType(jdbcUrl, null); }
for (Filter filter : filters) {
filter.init(this);
}
DruidDataSource的init方法中,dbType的赋值在filter.init前,如果我们采用ConfigFilter来配置数据源,由于jdbcUrl是在ConfigFilter中才会设置,所以dbType就获取不了,能否调整一下上述代码的顺序?
原提问者GitHub用户rainsoft
个问题的原因可能是因为config.file文件中没有正确配置数据源的相关信息,导致dbType获取不到,返回NULL。
config.file文件一般用来配置应用程序的一些参数,包括数据源的相关信息。在使用config.file配置数据源时,需要确保以下几点:
config.file文件的路径和名称都是正确的。
数据源的相关信息(如数据库类型、数据库地址、用户名、密码等)都正确配置。
在应用程序中正确获取config.file文件中数据源信息的代码。
如果以上几点都正确配置,但仍然出现dbType获取不到的问题,可以尝试以下解决方案:
检查config.file文件是否正确加载。可以在应用程序中添加日志输出,确认config.file文件被正确加载。
检查dbType获取的代码是否正确。可以在代码中添加日志输出,确认dbType获取的代码正确执行。
检查数据源相关的jar包是否正确引入。如果缺少相关的jar包,可能会导致dbType获取不到。
可以调整代码的顺序,确保在执行filter.init之前获取并设置dbType。你可以将获取dbType的代码放在filter.init之前,如下所示:
if (this.dbType == null || this.dbType.length() == 0) {
this.dbType = JdbcUtils.getDbType(jdbcUrl, null);
}
for (Filter filter : filters) {
filter.init(this);
}
这样可确保在执行filter.init之前获取并设置了dbType的值,即使使用ConfigFilter配置数据源,也能正确获取dbType。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
根据您提供的代码片段,确实存在一个问题。在DruidDataSource的初始化方法中,初始化过滤器(filters)之前,应该先获取数据库类型(dbType),以便在过滤器初始化时使用。
要解决这个问题,您可以尝试修改代码的顺序,将获取数据库类型的逻辑放在过滤器初始化之前。例如,可以将以下代码段:
if (this.dbType == null || this.dbType.length() == 0) { this.dbType = JdbcUtils.getDbType(jdbcUrl, null); } 移到过滤器初始化之前,如下所示:
this.dbType = JdbcUtils.getDbType(jdbcUrl, null); for (Filter filter : filters) { filter.init(this); } 这样就确保了在过滤器初始化之前获取到了数据库类型,并且可以在过滤器中正确使用它。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。