You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
7.3 KiB

11 months ago
package com.dsideal.base;
import cn.hutool.core.io.FileUtil;
import com.cybermkd.mongo.plugin.MongoJFinalPlugin;
11 months ago
import com.dsideal.base.Admin.Controller.LoginController;
11 months ago
import com.dsideal.base.Index.Controller.IndexController;
import com.dsideal.base.Interceptor.*;
import com.dsideal.base.Util.LogBackLogFactory;
import com.jfinal.config.*;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;
import java.io.File;
public class Start extends JFinalConfig {
//配置文件
public static void main(String[] args) {
//配置文件
String configFile = "application_dev.properties";
String myEnvVar = System.getenv("WORKING_ENV");
if (myEnvVar != null) {
configFile = configFile.replace("_dev", "_pro");
System.out.println("环境变量 WORKING_ENV 的值是: " + myEnvVar);
} else {
System.out.println("环境变量 WORKING_ENV 未设置。");
}
PropKit.use(configFile);
UndertowServer.create(Start.class, "undertow.properties").start();
}
/**
*
*/
@Override
public void configConstant(Constants me) {
//使用LogBack
me.setLogFactory(new LogBackLogFactory());
}
/**
*
*/
@Override
public void configRoute(Routes me) {
//默认页面
me.add("/", IndexController.class);
11 months ago
//登录路由
me.add("/login", LoginController.class);
11 months ago
}
@Override
public void configEngine(Engine engine) {
}
/**
*
*/
private String connectionTestQuery = "select 1";
// 连接池中允许的最大连接数。缺省值10推荐的公式((core_count * 2) + effective_spindle_count)
private int maxPoolSize = 10;
// 一个连接 idle 状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
private long idleTimeoutMs = 600000;
private long maxLifetimeMs = 1800000;
// 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生 SQLException 缺省:30秒
private long connectionTimeoutMs = 30000;
@Override
public void configPlugin(Plugins me) {
HikariCpPlugin hpPlugin = new HikariCpPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"),
PropKit.get("password").trim(), PropKit.get("driverClassName"));
hpPlugin.setConnectionTestQuery(connectionTestQuery);
hpPlugin.setConnectionTimeout(connectionTimeoutMs);
hpPlugin.setIdleTimeout(idleTimeoutMs);
hpPlugin.setMaxLifetime(maxLifetimeMs);
hpPlugin.setMaximumPoolSize(maxPoolSize);
String jdbcUrlSlave = PropKit.get("jdbcUrlSlave");
if (StrKit.isBlank(jdbcUrlSlave)) jdbcUrlSlave = PropKit.get("jdbcUrl");
HikariCpPlugin slavePlugin = new HikariCpPlugin(jdbcUrlSlave, PropKit.get("user"),
PropKit.get("password").trim(), PropKit.get("driverClassName"));
slavePlugin.setConnectionTestQuery(connectionTestQuery);
slavePlugin.setConnectionTimeout(connectionTimeoutMs);
slavePlugin.setIdleTimeout(idleTimeoutMs);
slavePlugin.setMaxLifetime(maxLifetimeMs);
slavePlugin.setMaximumPoolSize(maxPoolSize);
me.add(hpPlugin);
me.add(slavePlugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(hpPlugin);
//遍历sql目录下所有的sql文件
File sqlDir;
String basePath = PathKit.getRootClassPath();
sqlDir = new File(basePath + "/Sql");
File[] sqlFiles = sqlDir.listFiles();
for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) {
//只加载.sql文件
if (sqlFile.getName().indexOf(".sql") > 0) {
arp.addSqlTemplate("/Sql/" + sqlFile.getName());
}
}
arp.setShowSql(true);
arp.setDialect(new MysqlDialect());
//加载
me.add(arp);
//集成MongoDb
String mongodbUri = PropKit.get("mongodbUri");
MongoJFinalPlugin jFinalPlugin = new MongoJFinalPlugin();
// 验证连接字符串是否以预期的前缀开始
if (!mongodbUri.startsWith("mongodb://")) {
System.out.println("Invalid connection string format.");
return;
}
// 解析用户名和密码
int atIndex = mongodbUri.indexOf("@");
if (atIndex == -1) {
System.out.println("Username and password section is missing.");
return;
}
String userInfo = mongodbUri.substring("mongodb://".length(), atIndex);
String[] userInfoParts = userInfo.split(":");
String username = userInfoParts[0];
String password = userInfoParts.length > 1 ? userInfoParts[1] : "";
// 提取服务器地址列表
int slashIndex = mongodbUri.indexOf("/", atIndex + 1);
if (slashIndex == -1) {
System.out.println("No database name found.");
return;
}
String serverAddresses = mongodbUri.substring(atIndex + 1, slashIndex);
String[] servers = serverAddresses.split(",");
// 提取数据库名称,忽略查询参数
int questionMarkIndex = mongodbUri.indexOf("?", slashIndex);
String dbName = questionMarkIndex == -1
? mongodbUri.substring(slashIndex + 1)
: mongodbUri.substring(slashIndex + 1, questionMarkIndex);
jFinalPlugin.setDatabase(dbName);
jFinalPlugin.auth(username, password);
for (String server : servers) {
// 分割服务器地址以获取IP和端口
int portIndex = server.lastIndexOf(":");
String ipWithAt = server.substring(0, portIndex);
String ip = ipWithAt.substring(ipWithAt.indexOf("@") + 1);
String port = server.substring(portIndex + 1);
jFinalPlugin.add(ip, Integer.parseInt(port));
}
me.add(jFinalPlugin);
}
/**
*
*/
@Override
public void configInterceptor(Interceptors me) {
//注册参数数字检查器
me.add(new IsNumbericInterceptor());
//注册Ids检查是不是数字的检查器
me.add(new CheckIdsInterceptor());
//注册一个GUID号的检查器
me.add(new IsGuidInterceptor());
//注册一个检查输入文本长度的拦截器
me.add(new LengthInterceptor());
//JWT检查器
me.add(new JwtCheckInterceptor());
}
/**
*
*/
@Override
public void configHandler(Handlers me) {
}
/**
* jfinal
*/
@Override
public void onStart() {
//打印 启动Logo
String path = Start.class.getClassLoader().getResource("logo.txt").getPath();
File file = new File(path);
System.out.println(FileUtil.readUtf8String(file));
}
}