diff --git a/nutzboot-starter/nutzboot-starter-nutz-dao/src/main/java/org/nutz/boot/starter/nutz/dao/NutDaoStarter.java b/nutzboot-starter/nutzboot-starter-nutz-dao/src/main/java/org/nutz/boot/starter/nutz/dao/NutDaoStarter.java index 9d91578b9f8120126d31d1e73ff1e75087156f5d..5b0d00a08d47e402111da72d375e2f656026e194 100644 --- a/nutzboot-starter/nutzboot-starter-nutz-dao/src/main/java/org/nutz/boot/starter/nutz/dao/NutDaoStarter.java +++ b/nutzboot-starter/nutzboot-starter-nutz-dao/src/main/java/org/nutz/boot/starter/nutz/dao/NutDaoStarter.java @@ -2,9 +2,12 @@ package org.nutz.boot.starter.nutz.dao; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.sql.DataSource; +import com.alibaba.druid.pool.DruidDataSource; import org.nutz.boot.annotation.PropDoc; import org.nutz.boot.starter.jdbc.DataSourceStarter; import org.nutz.dao.SqlManager; @@ -17,6 +20,7 @@ import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.lang.Strings; +import org.nutz.lang.util.Regex; import org.nutz.log.Log; import org.nutz.log.Logs; import org.nutz.plugins.cache.dao.DaoCacheInterceptor; @@ -182,9 +186,37 @@ public class NutDaoStarter { dao.setRunner(runner); } } + injectManyDao(); return dao; } + private void injectManyDao() { + // 正则匹配多数据库url + String regex = "jdbc\\.many\\.(\\w*)\\.url"; + for (String key : conf.getKeys()) { + Pattern pattern = Regex.getPattern(regex); + Matcher match = pattern.matcher(key); + if(match.find()) { + // 获取数据库名称 + String name = match.group(1); + String prefix_name = "jdbc.many." + name + "."; + DataSource manyDataSource = DataSourceStarter.createDataSource(ioc, conf, prefix_name); + NutDao nutDao = new NutDao(); + nutDao.setDataSource(manyDataSource); + // 处理对应的从库 + String slave_prefix = prefix_name + "slave."; + DataSource slaveDataSource = DataSourceStarter.getSlaveDataSource(ioc, conf, slave_prefix); + if(slaveDataSource != null) { + NutDaoRunner runner = new NutDaoRunner(); + runner.setSlaveDataSource(slaveDataSource); + nutDao.setRunner(runner); + } + // 加入到ioc对象 + ioc.addBean(name + "Dao", nutDao); + } + } + } + /** * 返回值不能是CacheManager,因为要考虑没有加ehcache的情况 */