# mountain
**Repository Path**: fantasyworld/mountain
## Basic Information
- **Project Name**: mountain
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-01-10
- **Last Updated**: 2021-01-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# mountain 工程
[前工程目地址](https://github.com/jinshw/mountain-element-ui)
后端工程启动后访问URL: 访问url:http://localhost:8080/mt/index.html
---
## 更新日期-20200415
### buglist
* 权限管理一些bug修改
*
### newlist
* 用户管理添加昵称
## 更新日期-20200326
### buglist
* 在idea中执行package打包时,打包2次,是因为pom.xml文件中下边插件引起的,把这个注释掉
```xml
org.springframework.boot
spring-boot-maven-plugin
```
* 一个tomcat中部署多个类似项目,将报错 Unable to register MBean [HikariDataSource (null)] with key 'test1DataSource',这是
因为JMX:Java Management Extension(Java管理应用扩展),默认是true,导致冲突
解决方法,在application-xxxx.properties文件中配置下边属性,进行区分:
```properties
spring.jmx.default-domain=mt
```
### newlist
* 定时执行quartz的配置文件`quartz.properties` 区分环境配置dev(开发)、test(测试)、
prod(生产);在env包下区分配置,并且修改SchedulerConfig.java文件中代码
```
String active = SpringContextUtil.getActiveProfile();
propertiesFactoryBean.setLocation(new ClassPathResource("/env/" + active + "/quartz.properties"));
```
* 系统用户管理模块添加`密码重置`功能
* 新增修改密码功能
## 更新日志-20190806
* 多环境配置文件配置:修改`application.properties` 文件中`spring.profiles.active=dev`这个配置
## 更新日志-20190805
* pom文件中集成docker插件 `docker-maven-plugin`
* docker 服务需要开启 2375 端口
* 编辑docker.service文件,manjaro系统在`/usr/lib/systemd/system`路径下
* 配置`ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2375`
* 集成dockerfile文件
* 执行命令:`clean compile install -DskipTests docker:removeImage docker:build`
## 更新日志-20190726
* 集成Druid 连接池
* pom.xml中添加相应jar包
```$xslt
com.alibaba
druid-spring-boot-starter
1.1.10
```
* 修改配置文件
```text
#配置监控统计拦截的filters,去掉后监控界面SQL无法进行统计,'wall'用于防火墙
spring.datasource.mysql.filters=stat,wall
spring.datasource.mysql.driverClassName=com.mysql.jdbc.Driver
spring.datasource.mysql.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.mysql.url=jdbc:mysql://127.0.0.1:3306/mountain
spring.datasource.mysql.username=root
spring.datasource.mysql.password=root
```
* 修改数据源配置类:把`MysqlDataSourceConfig`类中数据源应用到的类都修改为Druid对应的类
```java
@Configuration
@MapperScan(basePackages = "com.site.mountain.dao.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {
// @Primary 确定此数据源为master
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
@Primary
public DruidDataSource mysqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
//....
}
````
* 设置Druid配置类`DruidConfig.java`
* Druid监控页面URL:[http://172.22.112.130:8080/mt/druid ]
* 存在问题:
* 访问Druid监控页面URL时,系统必须先登录,因为shiro拦截了访问,但是在shiro放开`druid/**` 访问拦截,会导致系统主页面等链接不能访问,待解决...
## 更新日志-20190711
* 新增定时任务模块
* 集成quartz 2.2.1插件
```xml
...
org.quartz-scheduler
quartz
2.2.1
org.springframework
spring-context-support
...
```
* 在quartz 官网中下载相应的数据脚本,并且把数据库刷入到本地数据库中
* 配置quartz.properties 配置文件
* 配置SchedulerConfig.java 文件
* 新增分页插件
```xml
com.github.pagehelper
pagehelper
5.0.0
```
* 填坑:
* quartz.properties文件中下边这句话必须注释掉,不然会报Bean对象重复注入
```
#org.quartz.scheduler.instanceName = DefaultQuartzScheduler
```
* qrtz_triggers.TRIGGER_STATE 这个字段为定时器的状态
## 更新日志-20190709
* 新增菜单路由查询
* 更新前端工程mountain-element-ui路由菜单渲染
* 更新菜单表字段默认值
* 更新菜单新增/编辑页面元素
* 新增菜单步骤:
* 在后台系统添加菜单
* 新增菜单给角色赋权
* 在前端工程中添加相应的前端工程文件(.vue)
## 更新日志-20190703
* 解决事务失效问题:springboot和shiro框架集成时,先加载shiro,这时sysUserService还没有实例化,导致事务失效,
在sysUserService 上加载 `@Lazy`
* 级联删除、更新、关联表插入
* 删除代码
## 更新日志-20190628
* 前端框架改为vue-admin-template
* 后端springboot工程代码重构
*****
## 集成
* Spring Boot
* Mybatis
* MySql
* Swagger2
* d2-admin-start-kit UI 框架 (element ui)
* 多数据源mysql、oracle
* logback 日志
## 问题
* 前后端分离跨域问题:
前端使用d2-admin-start-kit(vuejs2+elementui)框架,
后端使用springboot+shiro+mybatis+mysql,导致前端页面调用接口时
有跨域问题。 现有3种方案,如下(现使用第一种方案):
- 第一种方案:前端用`http-proxy-middleware`插件解决跨域
在vue.confg.js中配置:
~~~
proxy: {
'/login': {
target:'http://127.0.0.1:8080/mt/loginCross', // 你请求的第三方接口
changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite:{ // 路径重写,
'^/login': '' // 替换target中的请求地址,也就是说以后你在请求http://api.jisuapi.com/XXXXX这个地址的时候直接写成/api即可。
}
}
}
~~~
- 第二种方案:在后台Controller中添加跨域标签注解
@CrossOrigin(origins = "http://127.0.0.1:8081")
- 第三种方案:Nginx配置解决跨域(生产系统使用)
* 多数据源注意点
- dao层不能重复:例如在test1和test2数据源dao层中名称不能重复,否则提示注册JavaBean名称重复。
* shiro 问题:
在protected AuthenticationInfo doGetAuthenticationInfo方法中,代码
SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(name, userInfo.getPassword().toString(), getName());
如果数据库中用户名和密码相等,不跳转到/loginCross,待解决……