最近有个小项目,需要一个管理后台,以前的由于技术层太旧了而且其它依赖比较多,不想带过来,于是想趁着新项目,试一下一些开源的业务框架.
jeecg,jeesite以前经常听到,去下载来看了,发现jeecg设计的过于自动了,都不太清楚怎么开发新的业务
jeesite还不错,有明显暴露的web编写,其界面和使用体验也真不错,不过其表要按其标准来设计.而且底层代码不开源
guns 比较新,也比较简单,其代码全部开源,没有上面的两个那么完善(其实还差得有点远),不过重在简单易看好修改,所以选择这个
其它还有基于spring cloud等的开源框架,考虑到我们只是刚开始,所以没去选择
现在时间是2018/12,guns的作者把其功能 拆分了多个模块依赖
管理后台的业务主要是 https://gitee.com/stylefeng/guns
底层依赖是rose-kernel https://gitee.com/stylefeng-Roses/roses-kernel
其次,是生成器模块https://gitee.com/stylefeng/guns-generator
如果在使用过程中,希望项目能更扩展性好一些,可以把其 依赖的 底层业务模块加到 系统中.
新建一个空的maven project
把下面几个项目引进来
采用maven的父子模块方式,把各依赖均加到自己的服务中
drwxr-xr-x 1 aguns 1049089 0 12月 14 14:26 guns/
drwxr-xr-x 1 aguns 1049089 0 12月 14 14:26 guns-generator/
drwxr-xr-x 1 aguns 1049089 0 12月 14 14:26 kernel-core/
drwxr-xr-x 1 aguns 1049089 0 12月 14 14:26 kernel-model/
-rw-r--r-- 1 aguns 1049089 6840 12月 14 10:11 pom.xml
/pom.xml 中,这一部分是copyhttps://gitee.com/stylefeng-Roses/roses-kernel.git 中的/pom.xml,有所修改,
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
com.mytest.manage
backguns
pom
1.0-SNAPSHOT
kernel-model
kernel-core
guns
1.8
UTF-8
UTF-8
Finchley.RELEASE
2.3
1.2.47
1.1.10
2.3.2
0.9.1
4.1.2
2.0.1
1.18.0
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba
druid
${druid.version}
com.baomidou
mybatis-plus-boot-starter
${mp.springboot.version}
com.baomidou
mybatis-plus
${mp.springboot.version}
cn.hutool
hutool-core
${hutool.version}
com.alibaba
fastjson
${fastjson.version}
com.github.penggle
kaptcha
${kaptcha.version}
io.jsonwebtoken
jjwt
${jwt.version}
org.projectlombok
lombok
${lombok.versin}
de.codecentric
spring-boot-admin-starter-server
${spring.boot.admin}
de.codecentric
spring-boot-admin-server-ui
${spring.boot.admin}
de.codecentric
spring-boot-admin-starter-client
${spring.boot.admin}
org.apache.maven.plugins
maven-compiler-plugin
3.7.0
1.8
1.8
org.apache.maven.plugins
maven-source-plugin
3.0.1
true
compile
jar
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
package
jar
-Xdoclint:none
org.apache.maven.plugins
maven-gpg-plugin
1.5
verify
sign
src/main/resources
src/main/java
**/*.xml
kernel-model/pom.xml
backguns
com.mytest.manage
1.0-SNAPSHOT
kernel-model
jar
v201812
一些通用实体,枚举,异常等规范
com.baomidou
mybatis-plus
provided
org.projectlombok
lombok
org.springframework
spring-web
provided
org.springframework.boot
spring-boot-configuration-processor
true
kernel-core/pom.xml
backguns
com.mytest.manage
1.0-SNAPSHOT
kernel-core
v201812
jar
核心包,被其他模块引用
com.mytest.manage
kernel-model
v201812
cn.hutool
hutool-core
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
com.baomidou
mybatis-plus
org.springframework.boot
spring-boot-starter-jdbc
com.alibaba
druid
com.alibaba
fastjson
org.springframework.boot
spring-boot-starter-aop
org.springframework.cloud
spring-cloud-starter-openfeign
provided
org.springframework.boot
spring-boot-starter-data-redis
provided
javax.servlet
javax.servlet-api
provided
org.springframework.boot
spring-boot-starter-web
provided
org.springframework.boot
spring-boot-starter-cache
provided
org.springframework.boot
spring-boot-configuration-processor
true
guns-generator/pom.xml
cn.stylefeng.guns
guns-generator
v201812
jar
guns-generator
代码生成器
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
UTF-8
UTF-8
1.8
com.mytest.manage
kernel-core
201812
com.ibeetl
beetl
2.9.3
com.baomidou
mybatis-plus-generate
2.3
org.apache.velocity
velocity-engine-core
2.0
org.springframework.boot
spring-boot-starter-web
provided
org.apache.maven.plugins
maven-compiler-plugin
3.1
${java.version}
${java.version}
org.apache.maven.plugins
maven-source-plugin
3.0.1
true
compile
jar
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
package
jar
-Xdoclint:none
org.apache.maven.plugins
maven-gpg-plugin
1.5
verify
sign
src/main/resources
src/main/java
**/*.xml
guns/pom.xml
backguns
com.mytest.manage
1.0-SNAPSHOT
cn.stylefeng.guns
guns
1.0.0
guns-admin
mytest后台(guns 的spring boot版本)
jar
UTF-8
UTF-8
1.8
1.4.0
2.3.2
3.3.1
2.9.3
2.9.2
2.6.11
8.0.11
0.9.0
cn.stylefeng.guns
guns-generator
v201812
com.mytest.manage
kernel-core
v201812
mysql
mysql-connector-java
${mysql-connector-java.version}
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-cache
org.springframework.boot
spring-boot-starter-validation
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-devtools
true
org.apache.shiro
shiro-core
${shiro.version}
slf4j-api
org.slf4j
org.apache.shiro
shiro-spring
${shiro.version}
org.apache.shiro
shiro-ehcache
${shiro.version}
slf4j-api
org.slf4j
org.ehcache
ehcache
${ehcache.version}
com.github.penggle
kaptcha
${kaptcha.version}
com.ibeetl
beetl
${beetl.version}
io.springfox
springfox-swagger2
${swagger.version}
io.springfox
springfox-swagger-ui
${swagger.version}
io.jsonwebtoken
jjwt
${jwt.version}
org.apache.maven.plugins
maven-compiler-plugin
3.1
${java.version}
${java.version}
org.springframework.boot
spring-boot-maven-plugin
true
org.apache.maven.plugins
maven-resources-plugin
@
false
src/main/webapp
src/main/resources
true
src/main/java
**/*.xml
local
local
true
dev
dev
test
test
produce
produce
代码生成菜单:
随后,在生成的代码中找到 TUser.sql,里面有增加到菜单 的语句(建议 )
,或者,用下面的方式:增加到菜单,
再分配菜单到角色管理员中,然后重启刷新即可
guns已经有相应的数据源处理了,但我都调不通,后来发现有个要修改的地方:
如果在做多数据源的时候,有下面这样的配置,则spring会自己生成一个bean名为datasource的对象,
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
filters: wall,mergeStat
解决:
可以把上面的spring: 去掉改成自定义的,即把默认数据源给去掉!!
biz:
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: root
filters: wall,mergeStat
当然,相应的properties配置也要改!!!
@Bean
@ConfigurationProperties(prefix = "biz.datasource")
public DruidProperties druidProperties() {
return new DruidProperties();
}
原因解释:
在com.baomidou.mybatisplus.spring.boot.starter.MybatisPlusAutoConfiguration中有如下代码:
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
由于使用了spring默认的配置,则这个datasource不是我们想要的 DynamicDataSource
如果自己配置的DynamicDataSource对象也叫datasource,则自己的对象不会执行导致后续请求总是会走 默认数据源!!!
作者之前的双数据源不太友好,这里修改成如下配置,
#多数据源情况的配置
guns:
muti-datasource:
open: true
datasources[0]:
name: dataSourceGuns
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: mytest
password: mytest
filters: wall,mergeStat
datasources[1]:
name: dataSourceBiz
url: jdbc:mysql://127.0.0.1:3306/mytest?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: mytest
password: mytest
然后配置代码也有相应的修改
@Configuration
@ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "true")
@EnableTransactionManagement(order = 2, proxyTargetClass = true)
@MapperScan(basePackages = {"cn.stylefeng.guns.modular.*.dao", "cn.stylefeng.guns.modular.system.dao.mapping"})
public class MultiDataSourceConfig {
private static Logger log = LoggerFactory.getLogger(MultiDataSourceConfig.class);
/**
* druid配置
*/
@Bean
@ConfigurationProperties(prefix = "bizs.datasource")
public DruidProperties druidProperties() {
return new DruidProperties();
}
/**
* 多数据源切换的aop
*/
@Bean
public MultiSourceExAop multiSourceExAop() {
return new MultiSourceExAop();
}
/**
* 生成DruidDataSource数据源
*/
private DruidDataSource dataSource(DruidProperties druidProperties) {
DruidDataSource dataSource = new DruidDataSource();
druidProperties.config(dataSource);
return dataSource;
}
@Autowired
private MutiDataSourceListProperties mutiDataSourceListProperties;
@Bean
@ConfigurationProperties(prefix = "guns.muti-datasource")
public MutiDataSourceListProperties mutiDataSourceProperties() {
return new MutiDataSourceListProperties();
}
/**
* 多数据源连接池配置
*/
@Bean
public DynamicDataSource mutiDataSource() {
//获取properteis 生成 datasourcelist
HashMap
多数据源配置
/**
* 多数据源配置
*/
public class MutiDataSourceListProperties {
private boolean open;
public boolean isOpen() {
return open;
}
public void setOpen(boolean open) {
this.open = open;
}
private List datasources;
public List getDatasources() {
return datasources;
}
public void setDatasources(List datasources) {
this.datasources = datasources;
}
}
guns是比较新的业务架子,也比较简单而且全部开源,
感谢作者的开源,非常便利,希望大家能给这个项目多多贡献
附项目链接
https://gitee.com/stylefeng/guns