首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
jfinal配置类
yuer_2018
2019-01-02 15:06
在jfinal配置类中,afterJFinalStart中加载数据库的内容 怎么正确抽取? 试过抽取到对应model的service层,但是会报错。
项目:
JFinal
评论区
杜福忠
2019-01-02 16:56
https://www.jfinal.com/doc/5-15
没有使用 dp.start();
arp.start();呗 , 话说, 你为什么要在 afterJFinalStart 中启动了?不在configPlugin(Plugins me)中了?
回复
yuer_2018
2019-01-03 13:00
@杜福忠
因为在configPlugin(Plugins me)中配置需要添加 dp.start(); 但是相当于重复启动,因为configPlugin(Plugins me)最后还是会去执行dp.start(),所以就觉得还是等系统自己启动完 再去加载,在afterJFinalStart 去读取数据库 使用Model.dao.方法();
回复
杜福忠
2019-01-03 18:39
@yuer_2018
其实就算start() 多次也没有问题,因为里面有判断,保证只会启动一次,其次是 afterJFinalStart 被回调的时候, Plugins 里面已经被全部调start()了啊, 所以你可以直接在 afterJFinalStart 写 Model.dao.方法 没有问题的
回复
yuer_2018
2019-01-03 19:49
@杜福忠
jfinal中com.jfinal.core包的config类这里有判断只启动一次吗?
private static void startPlugins() {
List pluginList = plugins.getPluginList();
if (pluginList == null) {
return ;
}
for (IPlugin plugin : pluginList) {
try {
// process ActiveRecordPlugin devMode
if (plugin instanceof com.jfinal.plugin.activerecord.ActiveRecordPlugin) {
com.jfinal.plugin.activerecord.ActiveRecordPlugin arp = (com.jfinal.plugin.activerecord.ActiveRecordPlugin)plugin;
if (arp.getDevMode() == null) {
arp.setDevMode(constants.getDevMode());
}
}
if (plugin.start() == false) {
String message = "Plugin start error: " + plugin.getClass().getName();
log.error(message);
throw new RuntimeException(message);
}
}
catch (Exception e) {
String message = "Plugin start error: " + plugin.getClass().getName() + ". \n" + e.getMessage();
log.error(message, e);
throw new RuntimeException(message, e);
}
}
}
回复
杜福忠
2019-01-03 19:59
@yuer_2018
不是startPlugins, 是https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/plugin/activerecord/ActiveRecordPlugin.java 的start() 和
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/plugin/druid/DruidPlugin.java 的start()
回复
yuer_2018
2019-01-03 20:31
@杜福忠
是不是在configPlugin(Plugins plugins) 中plugins.add(activeRecordPlugin),在configPlugin执行完后,jfinal框架去调用activeRecordPlugin中的start()方法,由于
activeRecordPlugin的start()中有
public boolean start() {
if (isStarted) {
return true;
}
所以我如果在configPlugin(Plugins plugins) 中手动.start() ,也不会重复启动
是这样吗?
回复
杜福忠
2019-01-03 20:57
@yuer_2018
嗯可以这么讲, 更确切的应该是 你手动调.start()是先执行的, 而 jfinal框架去调的时候是后执行的了
回复
yuer_2018
2019-01-03 21:18
@杜福忠
好 谢谢。那另外有个疑问
jfinal框架去启动插件的方法是在com.jfinal.core包的config类中吗?
private static void configPluginWithOrder(int order, JFinalConfig jfinalConfig) {
if (order == constants.getConfigPluginOrder()) {
jfinalConfig.configPlugin(plugins);
startPlugins(); // very important!!!
}
}
private static void startPlugins() { //这里是启动插件的吧
List pluginList = plugins.getPluginList();
if (pluginList == null) {
return ;
}
for (IPlugin plugin : pluginList) {
try {
// process ActiveRecordPlugin devMode
if (plugin instanceof com.jfinal.plugin.activerecord.ActiveRecordPlugin) {
com.jfinal.plugin.activerecord.ActiveRecordPlugin arp = (com.jfinal.plugin.activerecord.ActiveRecordPlugin)plugin;
if (arp.getDevMode() == null) {
arp.setDevMode(constants.getDevMode()); //但是这里不是只是设置了一下每个插件的setDevMode吗?并没用去调start()方法呀
}
}
if (plugin.start() == false) {
String message = "Plugin start error: " + plugin.getClass().getName();
log.error(message);
throw new RuntimeException(message);
}
}
catch (Exception e) {
String message = "Plugin start error: " + plugin.getClass().getName() + ". \n" + e.getMessage();
log.error(message, e);
throw new RuntimeException(message, e);
}
}
}
回复
杜福忠
2019-01-03 21:27
@yuer_2018
if (plugin.start() == false) 这一行呀
回复
yuer_2018
2019-01-04 10:32
@杜福忠
好滴 明白了 感谢大佬
回复
发送
我要反馈
热门反馈
扫码入社
没有使用 dp.start();
arp.start();呗 , 话说, 你为什么要在 afterJFinalStart 中启动了?不在configPlugin(Plugins me)中了?