Springboot设置了mybatis.config-location,然后在mybatis-config.xml下配置了databaseIdProvider type="DB_VENDOR"
但是不会生效,调试发现初始化时由于Database是在application.propertities下定义的,mybatis初始化时会检测Environment是否为null,为null则不设置databaseId,在Spring下知道如何配置,但是SpringBoot下搞不定,求大神指点
有没有人同时用mysql和oracle 然后 databaseid 不会切换
把自动读取的 去掉 试试看。
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
然后import @ImportResource 你的xml
上面的回答是正确的:
@Bean
public DatabaseIdProvider getDatabaseIdProvider(){
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties properties = new Properties();
properties.setProperty("Oracle1","oracle");
properties.setProperty("MySQL","mysql");
databaseIdProvider.setProperties(properties);
return databaseIdProvider;
}
在项目中加上这个bean就OK。这里稍微补充下,
mapper的xml中直接使用databaseId就可以了吗,如下:
<select id="list" resultMap="user" databaseId="mysql">
这里的databaseId的值使上面bean中配置的名字,可以自己定义。在properties配置文件中配置好需要用的数据库类型就好,不需要额外的配置、
数据源得有这个databaseid属性配置啊,不然数据源还是找到多个相同bean 会抛错
找到解决方法:需要手动注入一个bean
@Bean
public DatabaseIdProvider getDatabaseIdProvider() {
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties p = new Properties();
p.setProperty("Oracle", "oracle");
p.setProperty("MySQL", "mysql");
databaseIdProvider.setProperties(p);
return databaseIdProvider;
}