diff --git a/lealone-db/src/main/java/com/lealone/db/PluginObject.java b/lealone-db/src/main/java/com/lealone/db/PluginObject.java index e1f3de10c..b090a06f2 100644 --- a/lealone-db/src/main/java/com/lealone/db/PluginObject.java +++ b/lealone-db/src/main/java/com/lealone/db/PluginObject.java @@ -9,6 +9,7 @@ import java.net.URLClassLoader; import com.lealone.common.util.CaseInsensitiveMap; +import com.lealone.common.util.MapUtils; import com.lealone.common.util.StatementBuilder; /** @@ -91,4 +92,8 @@ public void stop() { public String getState() { return state; } + + public boolean isAutoStart() { + return MapUtils.getBoolean(parameters, "auto_start", false); + } } diff --git a/lealone-main/src/main/java/com/lealone/main/Lealone.java b/lealone-main/src/main/java/com/lealone/main/Lealone.java index bfdff3ae4..b04971403 100644 --- a/lealone-main/src/main/java/com/lealone/main/Lealone.java +++ b/lealone-main/src/main/java/com/lealone/main/Lealone.java @@ -24,6 +24,7 @@ import com.lealone.db.LealoneDatabase; import com.lealone.db.PluggableEngine; import com.lealone.db.PluginManager; +import com.lealone.db.PluginObject; import com.lealone.db.SysProperties; import com.lealone.db.scheduler.Scheduler; import com.lealone.db.scheduler.SchedulerFactory; @@ -299,5 +300,14 @@ private void startProtocolServers() { logger.info(name + " started, host: {}, port: {}", server.getHost(), server.getPort()); } } + startPlugins(); + } + + private void startPlugins() { + List pluginObjects = LealoneDatabase.getInstance().getAllPluginObjects(); + for (PluginObject pluginObject : pluginObjects) { + if (pluginObject.isAutoStart()) + pluginObject.start(); + } } } diff --git a/lealone-sql/src/main/java/com/lealone/sql/admin/CreatePlugin.java b/lealone-sql/src/main/java/com/lealone/sql/admin/CreatePlugin.java index 8348b672d..c7aaa7b31 100644 --- a/lealone-sql/src/main/java/com/lealone/sql/admin/CreatePlugin.java +++ b/lealone-sql/src/main/java/com/lealone/sql/admin/CreatePlugin.java @@ -103,6 +103,9 @@ public int update() { lealoneDB.addDatabaseObject(session, pluginObject, lock); // 将缓存过期掉 lealoneDB.getNextModificationMetaId(); + + if (!lealoneDB.isStarting() && pluginObject.isAutoStart()) + pluginObject.start(); return 0; } }