JFinal多个数据源的问题

发布于 2021-12-02 23:31:40 字数 5068 浏览 705 评论 1

@JFinal 你好,想跟你请教个问题:

不知道是不是我版本太低的问题..因为项目上线了就没升版..用的是Jfinal2.0版本

现在问题是这样的..

我配置了多个数据源,当其中一个数据源出问题的时候,就直接报错了..错误都捕获不了,

另,附上我加载多数据源的方法,希望也能给大家参考

init.properties中配置多数据源


db.configs=postgresql_local
postgresql_local.db.driver=org.postgresql.Driver
postgresql_local.db.url=jdbc:postgresql://localhost:5432/wmmestest
postgresql_local.db.user=postgres
postgresql_local.db.password=postgres
postgresql_local.db.initialSize=20
postgresql_local.db.minIdle=20
postgresql_local.db.maxActive = 300
postgresql_local.db.timeBetweenEvictionRunsMillis = 60000
postgresql_local.db.maxOpenPreparedStatements=20
#See IKit.setAutoBindModel()
postgresql_local.db.autoBindModel.regex=classpath*:com/zcqm/**/model,classpath*:com/zcqm/ss/**/model
postgresql_local.db.tablePrefix=

启动JfinalConfig里

private void configDBPlugin(Plugins plugins) {
		/*************** DB CONFIG BEGIN ********************/
		// Multi DB Config From init
		// Set Config DB
		IDb.DBS = getProperty("db.configs").split(",");
		for (int i = 0; i < IDb.DBS.length; i++) {
			String dbConfig = IDb.DBS[i];
			try {
				IDataSourceProvider dataSourcePlugin;
				// DruidPlugin not support sqlite
				if (dbConfig.startsWith("sqlite3")) {
					dataSourcePlugin = new C3p0Plugin(getProperty(dbConfig + ".db.url"), getProperty(dbConfig + ".db.user"), getProperty(dbConfig + ".db.password"),
							getProperty(dbConfig + ".db.driver"));
					((C3p0Plugin) dataSourcePlugin).setInitialPoolSize(getPropertyToInt(dbConfig + ".db.initialSize", 10));
					((C3p0Plugin) dataSourcePlugin).setMinPoolSize(getPropertyToInt(dbConfig + ".db.minIdle", 10));
					((C3p0Plugin) dataSourcePlugin).setMaxIdleTime(getPropertyToInt(dbConfig + ".db.maxActive", 200));
					((C3p0Plugin) dataSourcePlugin).setAcquireIncrement(5);
				} else {
					dataSourcePlugin = new DruidPlugin(getProperty(dbConfig + ".db.url"), getProperty(dbConfig + ".db.user"), getProperty(dbConfig + ".db.password"),
							getProperty(dbConfig + ".db.driver"), "stat,wall");
					((DruidPlugin) dataSourcePlugin).set(getPropertyToInt(dbConfig + ".db.initialSize", 10), getPropertyToInt(dbConfig + ".db.minIdle", 10),
							getPropertyToInt(dbConfig + ".db.maxActive", 200));
					((DruidPlugin) dataSourcePlugin).setTimeBetweenEvictionRunsMillis(getPropertyToInt(dbConfig + ".db.timeBetweenEvictionRunsMillis", 60000));
					((DruidPlugin) dataSourcePlugin).setMaxPoolPreparedStatementPerConnectionSize(getPropertyToInt(dbConfig + ".db.maxOpenPreparedStatements", 10));
				}

				/**
				 * style if auto_bind ,only suport SimpleNameStyles.LOWER_UNDERLINE & ParamNameStyles.lowerUnderlineModule(str)
				 * SimpleNameStyles.LOWER_UNDERLINE -> javaFile: DevInfo.java bind tableName: dev_info
				 * ParamNameStyles.lowerUnderlineModule(str) -> javaFile: DevInfo.java bind tableName: str_dev_info
				 */
				INameStyle style = SimpleNameStyles.LOWER_UNDERLINE;
				if (!IUtils.isEmpty(getProperty(dbConfig + ".db.tablePrefix"))) style = ParamNameStyles.lowerUnderlineModule(getProperty(dbConfig + ".db.tablePrefix"));

				/**
				 * AutoTableBindPlugin Can Support Annotation @TableName(tableName,pkName,dbConfigName) <br />
				 */
				AutoTableBindPlugin atbp = new AutoTableBindPlugin(dbConfig, dataSourcePlugin, style);

				// 开发模式跟随系统
				atbp.setDevMode(getPropertyToBoolean("sys.devMode", false));
				// 显示SQL使用自定义的SQL显示,基本的方法不再显示SQL
				// atbp.setShowSql(true);
				// SqlReporter.setLogger(true);

				/**
				 * If dbConfig.db.autoBindModel.regex is null,then autoScan is false,also means it's the same of ActiveRecordPlugin
				 */
				boolean autoScan = false;
				if (!IUtils.isEmpty(getProperty(dbConfig + ".db.autoBindModel.regex"))) {
					autoScan = true;
					IKit.setAutoBindModel(atbp, getProperty(dbConfig + ".db.autoBindModel.regex"));
				}
				atbp.autoScan(autoScan);
				if (dbConfig.startsWith("mysql")) atbp.setDialect(new MysqlDialect());
				else if (dbConfig.startsWith("postgresql")) atbp.setDialect(new PostgreSqlDialect());
				else if (dbConfig.startsWith("oracle")) {
					atbp.setDialect(new OracleDialect());
					((DruidPlugin) dataSourcePlugin).setValidationQuery("SELECT 1 FROM DUAL");
				} else if (dbConfig.startsWith("sqlite3")) atbp.setDialect(new Sqlite3Dialect());
				else atbp.setDialect(new AnsiSqlDialect());
				atbp.setContainerFactory(new CaseInsensitiveContainerFactory(true));// 忽略大小写工厂类
				plugins.add((IPlugin) dataSourcePlugin);
				plugins.add(atbp);
				log.info("Database plugin:" + dbConfig + " init Successful.");
			} catch (Exception e) {
				log.error("数据库Config:[" + dbConfig + "]连接失败,请检查配置.", e);
				if (i == 0) throw new RuntimeException(e); // 只有0(主数据源才抛出错误,其他不抛出),这里无法捕获
			}
		}
		/*************** DB CONFIG END ********************/
	}



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤檠 2021-12-03 00:31:02

这个我可以回答你...通过单插件启动 去部署..不要在配置文件中一次性加载

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文