我现在用这个
切换到springboot2.0, 首先 ds.pay_${0..9} 首先这个语法不支持,spring会识别成0..9为一个变量,找不到这个变量报错
当我替换成:ds.pay_#{'$'}{0..9},勉强能过去,但是报另一个错:
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver
at io.shardingjdbc.spring.boot.SpringBootConfiguration.setDataSourceMap(SpringBootConfiguration.java:53)
at io.shardingjdbc.spring.boot.SpringBootConfiguration.setEnvironment(SpringBootConfiguration.java:49)
at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:105)
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:96)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:423)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)
... 52 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 59 common frames omitted
由于spring boot 2.0刚刚发布,我们暂时没需求也没精力去升级。因此如果社区的小伙伴有感兴趣的欢迎认领
搞了一天终于搞定了,改成编程方式调用,不用starter方式
@aaa5131421 同样遇到这个问题,已经是编程方式调用。跪求怎么解决
`
……………………
@Bean
@Primary
public static SqlSessionFactoryBean createSqlSessionFactoryBean() throws SQLException, IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 设置mybatis configuration 扫描路径
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("META-INF/mybatis-config.xml"));
// 添加mapper 扫描路径
PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "/META-INF/mapper/*.xml"));
// 设置datasource
DataSource dataSource = getMasterSlaveDataSource();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
private static DataSource getMasterSlaveDataSource() throws SQLException {
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig.setName("ds_master_slave");
masterSlaveRuleConfig.setMasterDataSourceName("ds_master");
masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds_slave_0", "ds_slave_1"));
return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, new ConcurrentHashMap<>());
}
private static Map<String, DataSource> createDataSourceMap() {
final Map<String, DataSource> result = new HashMap<>(3, 1);
result.put("ds_master", createDataSource("dev"));
result.put("ds_slave_0", createDataSource("dev"));
result.put("ds_slave_1", createDataSource("dev"));
return result;
}
private static DataSource createDataSource(final String dataSourceName) {
DruidDataSource result = new DruidDataSource();
result.setDriverClassName(com.mysql.jdbc.Driver.class.getName());
result.setUrl(URL_PREFIX + dataSourceName);
result.setUsername(USER_NAME);
result.setPassword(PASSWORD);
return result;
}
……………………
`
@jixiaod 你什么问题
@aaa5131421 在这 #643
@aaa5131421 跟你这个一样的错误
Caused by: java.lang.NullPointerException: null
at io.shardingjdbc.spring.boot.SpringBootConfiguration.setDataSourceMap(SpringBootConfiguration.java:55) ~[sharding-jdbc-core-spring-boot-starter-2.0.3.jar:na]
@jixiaod
改成编程方式调用啊,你看看 shardingjdbc的文档, 那里有编程方式怎么调用,你只要通过shardingjdbc return 一个 datasource就可以了 这个datasource就可以当成一个bean被boot自动注入使用
@aaa5131421
把pom.xml的删除,就好了……
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
这个issue怎么就close了?不准备支持spring boot2.0了吗?
我试验了sharding-jdbc-spring-boot-starter 3.1.0,应该支持Spring-boot 2.1.1.RELEASE
Most helpful comment
这个issue怎么就close了?不准备支持spring boot2.0了吗?