commit f201fa589e6a21ec653962d3df45235bc8150d89 Author: lroyia Date: Thu Feb 12 09:48:07 2026 +0800 初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0aa5210 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.idea +/*.iml +/target diff --git a/README.md b/README.md new file mode 100644 index 0000000..b17df3c --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# youfool-framework-springboot 基础项目模板 + +## 数据源 + +当前版本(3.0版本以上)的基础框架使用了`苞米豆`的[动态数据源](https://github.com/baomidou/dynamic-datasource-spring-boot-starter) 。 + +使用事务时需注意使用`@DSTransactional`代替`@Transactional`来使用注解式事务。 + diff --git a/checkstyle-v1.0.xml b/checkstyle-v1.0.xml new file mode 100644 index 0000000..38adca5 --- /dev/null +++ b/checkstyle-v1.0.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0bf09d5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,163 @@ + + + + 4.0.0 + + com.chinaweal.youfool + youfool-prj-springboot3-template + 1.0.0 + jar + ${project.artifactId} + https://www.chinaweal.com.cn + boot基础的后台模板 + + 25 + true + UTF-8 + 25 + 25 + 25 + false + 3.4.5 + true + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + + + + + + com.chinaweal.youfool + youfool-framework-springboot3 + 1.0.4 + + + + org.postgresql + postgresql + 42.7.9 + + + org.projectlombok + lombok + 1.18.42 + provided + + + junit + junit + 4.12 + test + + + + mysql + mysql-connector-java + 8.0.28 + + + + + + ${project.artifactId} + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.8.1 + + + copy-dependencies + package + + copy-dependencies + + + + ${project.build.directory}/libs + + org.projectlombok + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + ZIP + + + nothing + nothing + + + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + 21 + 21 + + + -parameters + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.1 + + + utf-8 + true + + true + + false + + checkstyle-v1.0.xml + + + + validate + validate + + + check + + + + + + + diff --git a/src/main/java/com/chinaweal/youfool/prj/YoufoolApplication.java b/src/main/java/com/chinaweal/youfool/prj/YoufoolApplication.java new file mode 100644 index 0000000..1fc2ce4 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/YoufoolApplication.java @@ -0,0 +1,31 @@ +package com.chinaweal.youfool.prj; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.cache.annotation.EnableCaching; + +@SpringBootApplication(scanBasePackages = {"com.chinaweal"}) +@EnableCaching +@Slf4j +public class YoufoolApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + + SpringApplication.run(YoufoolApplication.class, args); + log.info("========================== 程序启动成功! =========================="); + log.info("====== 程 序:youfool-prj-springboot-template!"); + log.info("====== 描 述:boot基础的后台模板!"); + log.info("====== CMS 基础框架后台管理系统路径:/cms,账号:admin、密码:123456"); + log.info("====== 接口文档路径:/doc.html,账号:admin、密码:123456。注:如果乱码请指定VM -Dfile.encoding=UTF-8"); + log.info("====== Druid Monitor路径:/druid,账号:admin、密码:123456"); + log.info("===================================================================="); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + return builder.sources(this.getClass()); + } +} diff --git a/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java b/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java new file mode 100644 index 0000000..c31a268 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java @@ -0,0 +1,13 @@ +package com.chinaweal.youfool.prj.common.constants; + +import cn.dev33.satoken.session.SaSession; + +/** + * session常量 + * @author lroyia + * @since 2022/7/19 11:02 + **/ +public interface SessionConstants { + + String USER_KEY = SaSession.USER; +} diff --git a/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java b/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java new file mode 100644 index 0000000..d414ff2 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java @@ -0,0 +1,114 @@ +package com.chinaweal.youfool.prj.common.util; + +import java.util.UUID; + +/** + * 字符串工具类 + * + * @author lroyia + * @since 2022/4/20 15:04 + **/ +public abstract class StringUtils extends com.chinaweal.youfool.framework.springboot.common.util.StringUtils { + + private static final char[] HEX_DIGITS_LOW = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + + public static final char[] FILE_NAME_SPECIFY_CHARS = new char[]{'/', '\\', ':', '*', '"', '<', '>', '|'}; + + /** + * 是否全为非空 + * + * @param str 判断字串(可选参数) + * @return 判断结果 + * @author lroyia + * @since 2023年5月26日 11:39:29 + */ + public static boolean isNotBlankALl(String... str) { + for (String each : str) { + if (isBlank(each)) { + return false; + } + } + return true; + } + + /** + * 是否全为空 + * + * @param str 判断字串(可选参数) + * @return 判断结果 + * @author lroyia + * @since 2023年5月26日 11:35:29 + */ + public static boolean isBlankAll(String... str) { + for (String each : str) { + if (isNotBlank(each)) { + return false; + } + } + return true; + } + + /** + * 16进制字符串转byte数组 + * + * @param hex 16进制字符串 + * @return 转换结果 + * @author lroyia + * @since 2022年7月12日 15:13:13 + */ + public static byte[] hexFromString(String hex) { + int len = hex.length(); + byte[] buf = new byte[(len + 1) / 2]; + int i = 0; + int j = 0; + if (len % 2 == 1) + buf[j++] = (byte) fromDigit(hex.charAt(i++)); + while (i < len) + buf[j++] = (byte) (fromDigit(hex.charAt(i++)) << 4 | fromDigit(hex.charAt(i++))); + return buf; + } + + /** + * [0-9][A-F][a-f]转整形 + * + * @param ch 字符 + * @return 转换结果 + * @author lroyia + * @since 2022年7月12日 15:11:59 + */ + public static int fromDigit(char ch) { + if (ch >= '0' && ch <= '9') + return ch - 48; + if (ch >= 'A' && ch <= 'F') + return (ch - 65) + 10; + if (ch >= 'a' && ch <= 'f') + return (ch - 97) + 10; + else + throw new IllegalArgumentException("invalid hex digit '" + ch + "'"); + } + + /** + * 不是数字 + * + * @param cs 字符 + * @return 判断结果 + * @author lroyia + * @since 2022年8月22日 14:56:01 + */ + public static boolean isNotNumeric(CharSequence cs) { + return !isNumeric(cs); + } + + /** + * 获取一个UUID + * + * @return UUID + * @author lroyia + * @since 2022年9月15日 10:27:03 + */ + public static String getUUID() { + return UUID.randomUUID().toString().replace("-", EMPTY); + } + +} diff --git a/src/main/java/com/chinaweal/youfool/prj/config/PrjDataSource.java b/src/main/java/com/chinaweal/youfool/prj/config/PrjDataSource.java new file mode 100644 index 0000000..a2b0105 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/config/PrjDataSource.java @@ -0,0 +1,43 @@ +package com.chinaweal.youfool.prj.config; + +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.chinaweal.youfool.framework.springboot.mybatis.plus.CommonMetaObjectHandler; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ArrayUtils; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import javax.sql.DataSource; + +/** + * 项目的数据源 + */ + +@Configuration +@MapperScan(basePackages = {"com.chinaweal.youfool.framework.springboot.cms.**.mapper", "com.chinaweal.youfool.prj.**.mapper"}) +public class PrjDataSource { + + @Resource + private CommonMetaObjectHandler commonMetaObjectHandler; + + @Bean + @Primary + public MybatisSqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception { + MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); + bean.setDataSource(dataSource); + GlobalConfig globalConfig = new GlobalConfig(); + globalConfig.setMetaObjectHandler(commonMetaObjectHandler); + bean.setGlobalConfig(globalConfig); + bean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml")); + org.springframework.core.io.Resource[] prjResources = new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/mapper/**/*.xml"); + org.springframework.core.io.Resource[] cmsResources = new PathMatchingResourcePatternResolver().getResources("classpath*:cms/mybatis/mapper/**/*.xml"); + org.springframework.core.io.Resource[] resources = ArrayUtils.addAll(prjResources, cmsResources); + bean.setMapperLocations(resources); + return bean; + } +} diff --git a/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java b/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java new file mode 100644 index 0000000..567e40b --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java @@ -0,0 +1,45 @@ +package com.chinaweal.youfool.prj.config; + +import cn.dev33.satoken.interceptor.SaInterceptor; +import cn.dev33.satoken.router.SaRouter; +import cn.dev33.satoken.stp.StpUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * spring mvc 配置 + * + * @author lroyia + * @since 2022/2/8 18:04 + **/ +@Slf4j +@Configuration +public class SpringMvcConfig implements WebMvcConfigurer { + + /** + * 拦截器注册 + * + * @param registry 注册对象 + * @author lroyia + * @since 2022年4月20日 16:41:54 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 注册 Sa-Token 拦截器,定义详细认证规则 + registry.addInterceptor(new SaInterceptor(handler -> { +// // 根据路由划分模块,不同模块不同鉴权 +// SaRouter.match("/user/**", r -> StpUtil.checkPermission("user")); +// SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin")); +// SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods")); +// SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders")); +// SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice")); +// SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment")); + // 指定一条 match 规则 + SaRouter.notMatch("/user/auth/**", "/test/**", "/doc.html**", "/cross/**", "/swagger*", + "/cms/index.html", "/cms/static/**", "/cms/favicon.ico", "/cms/user/login", "/network/ping", "/error", "/static/data/**") + .match("/**", r -> StpUtil.checkLogin()); + })).addPathPatterns("/**"); + } +} \ No newline at end of file diff --git a/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java b/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java new file mode 100644 index 0000000..c2d8e90 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java @@ -0,0 +1,101 @@ +package com.chinaweal.youfool.prj.controller; + +import cn.dev33.satoken.session.SaSession; +import cn.dev33.satoken.stp.StpUtil; +import com.chinaweal.youfool.framework.springboot.common.util.AssertUtils; +import com.chinaweal.youfool.framework.springboot.common.util.RSAUtil; +import com.chinaweal.youfool.framework.springboot.rest.RestResult; +import com.chinaweal.youfool.framework.springboot.rest.ResultCode; +import com.chinaweal.youfool.framework.springboot.user.entity.UserBase; +import com.chinaweal.youfool.prj.common.constants.SessionConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 登录相关接口 + * + * @author lroyia + * @since 2022/4/20 15:02 + **/ +@Slf4j +@RestController +@RequestMapping("/user/auth") +public class LoginController { + + /** + * 登录接口 + * + * @param username 用户名 + * @param password 密码 + * @param encrypt 密码是否已经加密 + * @return 登录结果 + * @author lroyia + * @since 2022年4月20日 15:47:35 + */ + @PostMapping("login") + public RestResult doLogin(String username, String password, Boolean encrypt) { + AssertUtils.isNotBlank(username, password); + // TODO:与数据库匹配校验,具体按用户信息表 + + // 匹配成功的话,登记登录信息 TODO:这里的userId是用户唯一号,应根据实际的数据库信息进行替换 + StpUtil.login("userId"); + SaSession session = StpUtil.getSession(); + // 将用户信息存储至session TODO:登录信息存到这里 + UserBase userBase = new UserBase(); + Set permissionSet = new HashSet<>(); + permissionSet.add("admin"); + userBase.setPermission(permissionSet); + session.set("user", userBase); + + return RestResult.ok(); + } + + /** + * 登录信息 + * + * @return 状态判断 + * @author lroyia + * @since 2022年4月20日 15:58:26 + */ + @GetMapping("login/info") + public RestResult loginInfo() { + boolean login = StpUtil.isLogin(); + if (login) { + SaSession session = StpUtil.getSession(); + return RestResult.ok((UserBase) session.get(SessionConstants.USER_KEY)); + } + return RestResult.ok(null); + } + + /** + * 登出 + * + * @return 操作结果 + * @author lroyia + * @since 2022年4月20日 15:59:55 + */ + @GetMapping("logout") + public RestResult logout() { + StpUtil.logout(); + return RestResult.ok(); + } + + /** + * 列出用户权限信息 + * + * @return 权限列表 + * @author lroyia + * @since 2022年4月20日 16:12:09 + */ + @GetMapping("perm/list") + public RestResult> getPermList() { + return RestResult.ok(StpUtil.getPermissionList()); + } +} \ No newline at end of file diff --git a/src/main/java/com/chinaweal/youfool/prj/dev/ConstantCodeGen.java b/src/main/java/com/chinaweal/youfool/prj/dev/ConstantCodeGen.java new file mode 100644 index 0000000..c4cca33 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/dev/ConstantCodeGen.java @@ -0,0 +1,17 @@ +package com.chinaweal.youfool.prj.dev; + + +import com.chinaweal.youfool.framework.springboot.cms.dev.GenerateDictConstant; + +/** + * 常量代码生成器 + */ +public class ConstantCodeGen { + + public static void main(String[] args) { + GenerateDictConstant generator = new GenerateDictConstant("properties/codeGenerator"); + generator.generateConstant(); + } + private ConstantCodeGen(){ + } +} diff --git a/src/main/java/com/chinaweal/youfool/prj/dev/EnumsCodeGen.java b/src/main/java/com/chinaweal/youfool/prj/dev/EnumsCodeGen.java new file mode 100644 index 0000000..4f311c6 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/dev/EnumsCodeGen.java @@ -0,0 +1,17 @@ +package com.chinaweal.youfool.prj.dev; + + +import com.chinaweal.youfool.framework.springboot.cms.dev.GenerateDictEnums; + +/** + * 常量代码生成器 + */ +public class EnumsCodeGen { + + public static void main(String[] args) { + GenerateDictEnums generator = new GenerateDictEnums("properties/codeGenerator"); + generator.generateEnums(); + } + private EnumsCodeGen(){ + } +} diff --git a/src/main/java/com/chinaweal/youfool/prj/dev/TableCodeGen.java b/src/main/java/com/chinaweal/youfool/prj/dev/TableCodeGen.java new file mode 100644 index 0000000..c0083da --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/dev/TableCodeGen.java @@ -0,0 +1,19 @@ +package com.chinaweal.youfool.prj.dev; + + +import com.chinaweal.youfool.framework.springboot.mybatis.plus.FastCodeGenerator; + +/** + * 根据库表结构生成代码层 + */ +public class TableCodeGen { + + public static void main(String[] args) { + FastCodeGenerator fastCodeGenerator = new FastCodeGenerator("properties/codeGenerator"); + fastCodeGenerator.generate(); + } + + private TableCodeGen() { + } + +} diff --git a/src/main/java/com/chinaweal/youfool/prj/service/impl/StpInterfaceImpl.java b/src/main/java/com/chinaweal/youfool/prj/service/impl/StpInterfaceImpl.java new file mode 100644 index 0000000..fbe15e4 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/service/impl/StpInterfaceImpl.java @@ -0,0 +1,31 @@ +package com.chinaweal.youfool.prj.service.impl; + +import cn.dev33.satoken.stp.StpInterface; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 授权服务 + * @author lroyia + * @since 2022/4/20 15:42 + **/ +@Service +public class StpInterfaceImpl implements StpInterface { + @Override + public List getPermissionList(Object loginId, String loginType) { + List permList = new ArrayList<>(); + // TODO:利用loginId去数据库查询权限,并存到list中 + // 如:List permList = userService.getPermList(loginId); + return permList; + } + + @Override + public List getRoleList(Object loginId, String loginType) { + List roleList = new ArrayList<>(); + // TODO:利用loginId去数据库查询用户角色,并存到list中 + // 如:List roleList = userService.getRoleList(loginId); + return roleList; + } +} diff --git a/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java b/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java new file mode 100644 index 0000000..7f3a671 --- /dev/null +++ b/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java @@ -0,0 +1,40 @@ +package com.chinaweal.youfool.prj.service.impl; + +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.session.SaSession; +import cn.dev33.satoken.stp.StpUtil; +import com.chinaweal.youfool.framework.springboot.rest.RestResult; +import com.chinaweal.youfool.framework.springboot.user.entity.UserBase; +import com.chinaweal.youfool.framework.springboot.user.service.UserBaseService; +import com.chinaweal.youfool.prj.common.constants.SessionConstants; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户 + */ +@Service +public class UserBaseServiceImpl implements UserBaseService { + @Override + public RestResult login(String userName, String password, boolean frameworkLogin) { + return null; + } + + @Override + public UserBase getCurrentUser() { + try { + SaSession session = StpUtil.getSession(); + return session.get(SessionConstants.USER_KEY, null); + } catch (NotLoginException e) { + UserBase userBase = new UserBase(); + userBase.setUsername("guest"); + return userBase; + } + } + + @Override + public List getUserInfoByLoginId(List loginIdList) { + return null; + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..482616f --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,21 @@ +logging: + level: + dao: debug + youfool.dao: info + com.chinaweal.youfool.framework.springboot.log: debug + com.chinaweal.youfool.pms: debug + filePath: D:\project\pms\logs +spring: + datasource: + dynamic: + datasource: + master: + url: jdbc:mysql://172.22.80.35:3306/crgs?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC + username: chinaweal + password: ChinaWeal2021 + driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 + youfool: + url: jdbc:mysql://172.22.80.35:3306/aiccs?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC + username: chinaweal + password: ChinaWeal2021 + driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..257f5e1 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,21 @@ +logging: + level: + dao: info + youfool.dao: info + com.chinaweal.youfool.framework.springboot.log: info + com.chinaweal.youfool.pms: info + filePath: D:\project\pms\logs +spring: + datasource: + dynamic: + datasource: + master: + url: jdbc:mysql://172.22.80.35:3306/crgs?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC + username: chinaweal + password: ChinaWeal2021 + driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 + youfool: + url: jdbc:mysql://172.22.80.35:3306/aiccs?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC + username: chinaweal + password: ChinaWeal2021 + driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..d99d34a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,95 @@ +logging: + level: + root: info +spring: + profiles: + active: ${PROFILES_ACTIVE:dev} + application: + name: youfool-prj-springboot-template + datasource: + dynamic: + primary: master #设置默认的数据源或者数据源组,默认值即为master + strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 + datasource: + master: + druid: + filters: stat + initial-size: 2 + min-idle: 1 + max-active: 20 + max-wait: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: select version() + youfool: # 基础框架必要数据源,用于存储restLog + druid: + filters: stat + initial-size: 2 + min-idle: 1 + max-active: 20 + max-wait: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: select version() + druid: + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: admin + login-password: 123456 + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + +restLog: + ignoreServletPath: /druid,/swagger-resources,/v2/api-docs,/webjars + isSaveDb: false +# ignoreSuffix: .css,.jpg,.png,.icon,.html,.js + +knife4j: + enable: true +# production: false +# basic: +# enable: true +# username: admin +# password: 123456 + +server: + port: ${PRJ_PORT:8080} + servlet: + context-path: ${PRJ_CONTEXT_PATH:} +# Sa-Token配置 +sa-token: + # token名称 (同时也是cookie名称) + token-name: satoken + # token有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + active-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: uuid + # 是否输出操作日志 + is-log: false + +# swagger配置 +springdoc: + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: alpha + api-docs: + path: /v3/api-docs + group-configs: # 新增直接按照下面的编写拷贝后,改下group分组以及扫描的包路径即可,path不用改 + - group: '基础框架' + paths-to-match: '/**' + packages-to-scan: com.chinaweal.youfool.framework.springboot.cms + - group: '登录相关' + paths-to-match: '/**' + packages-to-scan: com.chinaweal.youfool.prj.controller \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..b04d162 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + ${consolePattern} + + + + + + + ${filePattern} + + ${logFilePath}/${logFileName}.log + + ${logFilePath}/${logFileName}.%d{yyyy-MM-dd}.%i.log + ${LOG_FILE_MAX_SIZE:-5MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + + + + ${filePattern} + + ${logFilePath}/${logFileName}-debug.log + + ${logFilePath}/${logFileName}-debug.%d{yyyy-MM-dd}.%i.log + ${LOG_FILE_MAX_SIZE:-5MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + DEBUG + ACCEPT + DENY + + + + + + ${filePattern} + + ${logFilePath}/${logFileName}-info.log + + ${logFilePath}/${logFileName}-info.%d{yyyy-MM-dd}.%i.log + ${LOG_FILE_MAX_SIZE:-5MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + INFO + ACCEPT + DENY + + + + + + ${filePattern} + + ${logFilePath}/${logFileName}-warn.log + + ${logFilePath}/${logFileName}-warn.%d{yyyy-MM-dd}.%i.log + ${LOG_FILE_MAX_SIZE:-5MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + WARN + ACCEPT + DENY + + + + + + ${filePattern} + + ${logFilePath}/${logFileName}-error.log + + ${logFilePath}/${logFileName}-error.%d{yyyy-MM-dd}.%i.log + ${LOG_FILE_MAX_SIZE:-5MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mybatis/mybatis-config.xml b/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..6fb0146 --- /dev/null +++ b/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/properties/codeGenerator.properties b/src/main/resources/properties/codeGenerator.properties new file mode 100644 index 0000000..75c5823 --- /dev/null +++ b/src/main/resources/properties/codeGenerator.properties @@ -0,0 +1,24 @@ +#mybatis-plus 代码生成器参数 +url=jdbc:postgresql://172.22.80.157:5432/prj_template +driverName=org.postgresql.Driver +#PostgreSQL schemaName +schemaName=public +username=postgres +password=123456 +#父包名 +parentPackageName=com.chinaweal.youfool.prj +#mapper文件存放路径 +mapperFilePath=/src/main/resources/mybatis/mapper/ +author=chinaweal +#mybatis-plus 代码生成器参数-------配置文件模板 +#module=rl-biz-med +#实体目录 +#entityPackagePath=/rl-rpc-service/src/main/java/com/chinaweal/fsrl/med/entity +#servicePackagePath=/rl-rpc-service/src/main/java/com/chinaweal/fsrl/med/service +#mapperPackagePath=/module +#serviceImplPackagePath=/module +#controllerPackagePath=/module +#mapper文件存放路径 +#字典常量生成路径 +constantPackagePath=/src/main/java/com/chinaweal/common +enumsPackagePath=/src/main/java/com/chinaweal/common \ No newline at end of file diff --git a/src/test/java/com/chinaweal/youfool/prj/AppTest.java b/src/test/java/com/chinaweal/youfool/prj/AppTest.java new file mode 100644 index 0000000..46014f3 --- /dev/null +++ b/src/test/java/com/chinaweal/youfool/prj/AppTest.java @@ -0,0 +1,32 @@ +package com.chinaweal.youfool.prj; + +import org.junit.Test; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +//@RunWith(SpringRunner.class) +//@SpringBootTest(classes = {YoufoolPmsApplication.class}) +public class AppTest { + + @Test + public void test1() { + String no = String.format("%04d", 51); + System.out.println(no); + System.out.println("12345678"); + } + + @Test + public void test2() { + List> params = new ArrayList<>(); + Map map = new LinkedHashMap<>(); + map.put("测试", "askdjf;kl "); + params.add(map); + String str = String.format("测试,%s", LocalDate.now()); + System.out.println(str); + } + +}