jfinal配置类

在jfinal配置类中,afterJFinalStart中加载数据库的内容 怎么正确抽取? 试过抽取到对应model的service层,但是会报错。

评论区

杜福忠

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

@杜福忠 好滴 明白了 感谢大佬

热门反馈

扫码入社