# 目录结构

# 项目结构

JavaWeb
├── javaweb-admin       // 后台管理(主要跟业务相关的业务模块)
├── javaweb-common      // 核心模块
│       └── annotation                    // 自定义注解
│       └── common                        // 基类文件
│       └── config                        // 全局配置
│       └── constant                      // 通用常量
│       └── controller                    // 常规控制器
│       └── enums                         // 通用枚举
│       └── exception                     // 通用异常
│       └── service                       // 常规实现
│       └── utils                         // 工具类
│       └── xss                           // XSS过滤处理
├── javaweb-generator   // 代码生成,独立模块(可移除)
├── javaweb-quartz      // 定时任务,独立模块(可移除)
├── javaweb-shiro       // Shiro安全认证模块
├── javaweb-system      // 系统管理(包括:登录、权限管理、日志管理等一系列模块)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 配置文件

通用配置 application.yml

spring:
  profiles:
    # 指定执行环境
    active: dev #@package.environment@

  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true

# MyBatis
mybatis-plus:
  mapper-locations: classpath*:mapper/*Mapper.xml
  # 实体扫描,多个package用逗号或者分号分隔
  type-aliases-package: com.javaweb.**.mapper
  configuration:
    # 开启驼峰命名法
    map-underscore-to-camel-case: true
    use-generated-keys: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

# Shiro相关配置
shiro:
  user:
    # 登录地址
    loginUrl: /login
    # 权限认证失败地址
    unauthorizedUrl: /unauth
    # 首页地址
    indexUrl: /index
    # 验证码开关
    captchaEnabled: true
    # 验证码类型 math 数组计算 char 字符
    captchaType: math
  cookie:
    # 设置Cookie的域名 默认空,即当前访问的域名
    domain:
    # 设置cookie的有效访问路径
    path: /
    # 设置HttpOnly属性
    httpOnly: true
    # 设置Cookie的过期时间,天为单位
    maxAge: 30
  session:
    # Session超时时间,-1代表永不过期(默认30分钟)
    expireTime: 30
    # 同步session到数据库的周期(默认1分钟)
    dbSyncPeriod: 1
    # 相隔多久检查一次session的有效性,默认就是10分钟
    validationInterval: 10
    # 同一个用户最大会话数,比如2的意思是同一个账号允许最多同时两个人登录(默认-1不限制)
    maxSession: -1
    # 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户
    kickoutAfter: false

# 系统信息
system:
  # 系统名称
  fullName: JavaWeb后台开发框架
  # 系统简称
  nickName: JavaWeb专业版v1.0.5
  # 系统版本号
  version: v1.0.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

数据源及环境变量配置 application-dev.yml

# 端口配置
server:
  port: 9010
#  servlet:
#    # 项目的前缀名
#    context-path: /javaweb
  IMAGE_URL: http://localhost:9010

spring:
  # 配置数据源
  datasource:
    # 使用阿里的Druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 填写你数据库的url、登录名、密码和数据库名
    url: jdbc:mysql://127.0.0.1:3306/javaweb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8&useSSL=true&tinyInt1isBit=false
    username: root
    password:
    druid:
      # 连接池的配置信息
      # 初始连接数
      initialSize: 5
      # 最小连接池数量
      minIdle: 5
      # 最大连接池数量
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一个连接在池中最大生存的时间,单位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置检测连接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,log4j
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      # 配置DruidStatFilter
      webStatFilter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      # 配置DruidStatViewServlet
      statViewServlet:
        url-pattern: "/druid/*"
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 127.0.0.1,192.168.163.1
        # IP黑名单 (存在共同时,deny优先于allow)
        deny: 192.168.1.73
        #  禁用HTML页面上的“Reset All”功能
        reset-enable: false
        # 登录名
        login-username: admin
        # 登录密码
        login-password: 123456

  # 自定义国际化配置
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
    encoding: UTF-8

  # Redis数据源
  redis:
    # 缓存库默认索引0
    database: 0
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    password:
    # 连接超时时间(毫秒)
    timeout: 6000
    # 默认的数据过期时间,主要用于shiro权限管理
    expire: 2592000
    jedis:
      pool:
        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1      # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10      # 连接池中的最大空闲连接
        min-idle: 1       # 连接池中的最小空闲连接

  servlet:
    multipart:
      # 过滤springmvc的文件上传
      enabled: false
      # 单个文件最大值
      max-file-size: 50MB
      # 上传文件总的最大值
      max-request-size: 100MB

  #邮件配置
  mail:
    # 设置邮箱主机
    host: smtp.qq.com
    # 开启邮箱POP3/SMTP服务,获取客户端授权码(注意并不是邮箱密码,而是授权码)
    password: bqsjzhmkjpfpjdaf
    # 邮箱的用户名
    username: 1175401194@qq.com
    properties:
      mail:
        smtp:
          # 设置是否需要认证,如果为true,那么用户名和密码就必须的。如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
          auth: true
          starttls:
            # STARTTLS[1]  是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
            enable: true
            require: true

  alisms:
    accessKeyId:
    accessKeySecret:
    regionId: cn-hangzhou
    signName: 大学圈
    templateCode:

  thymeleaf:
    # 默认true,开发是设置false,上线是设置为true以便提高性能
    # 开发时关闭缓存,不然没法看到实时页面
    cache: false
    enabled: true  #开启thymeleaf视图解析
    encoding: UTF-8
    #模板的模式,支持 HTML, XML TEXT JAVASCRIPT
    #严格的HTML语法模式
    mode: HTML
    # 指定模板所在的目录
    prefix: classpath:/templates/
    #后缀名
    suffix: .html
#    # 检查模板路径是否存在
#    check-template-location: true
    servlet:
      content-type: text/html
  #    enabled: true
  #    check-template: false

  jms:
    # 默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
    pub-sub-domain: false

  # activemq消息队列
  activemq:
    #队列地址
    broker-url: tcp://47.99.90.120:61616
    #是否是内存模式(内置MQ,true是 false否)
    in-memory: false
    # 等待消息发送响应的时间。设置为0等待永远
    send-timeout: 0
    #账户
    user: 'admin'
    #密码
    password: '123456'

  # 配置rabbitMq 服务器
  rabbitmq:
    host: 47.99.90.120
    port: 5672
    username: guest
    password: guest
    #虚拟host 可以不设置,使用server默认host
    virtual-host: /
    #消息确认配置项
    #确认消息已发送到交换机(Exchange)
    publisher-confirms: true
    #确认消息已发送到队列(Queue)
    publisher-returns: true
    listener:
      simple:
        #acknowledge-mode: manual #设置确认模式手工确认
        concurrency: 1 #消费者最小数量
        max-concurrency: 10 # 消费者最大数量
        prefetch: 5 # 单次可拉取消息数量
    cache:
      connection:
        # 缓存连接模式,默认一个连接,多个channel
        mode: channel
#         多个连接,多个channel
#        mode: connection

file:
  #上传的服务器上的映射文件夹
  accessPath: /uploads/
  #静态资源对外暴露的访问路径
  staticAccessPath: /**
  #静态资源实际存储路径
  uploadFolder: E:\JavaWeb\JavaWeb\uploads\

# Shiro
shiro:
  cipher-key: f/SX5TIve5WWzT4aQlABJA==
  cookie-name: shiro-cookie
  user:
    # 登录地址
    loginUrl: /login
    # 权限认证失败地址
    unauthorizedUrl: /unauth
    # 首页地址
    indexUrl: /index
    # 验证码开关
    captchaEnabled: true
    # 验证码类型 math 数组计算 char 字符
    captchaType: math
    cookie:
      # 设置Cookie的域名 默认空,即当前访问的域名
      domain:
      # 设置cookie的有效访问路径
      path: /
      # 设置HttpOnly属性
      httpOnly: true
      # 设置Cookie的过期时间,天为单位
      maxAge: 30
    session:
      # Session超时时间(默认30分钟)
      expireTime: 300
      # 同步session到数据库的周期(默认1分钟)
      dbSyncPeriod: 1
      # 相隔多久检查一次session的有效性,默认就是10分钟
      validationInterval: 10

# 代码生成
generate:
  # 作者
  author: 鲲鹏
  # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
  packageName: com.javaweb.admin
  # 模块名
  moduleName: javaweb-admin
  # 自动去除表前缀,默认是true
  autoRemovePre: true
  # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
  tablePrefix: pms_
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241

# 主要技术

# SpringBoot2

1、介绍

  • SpringBoot基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,去繁从简,快速创建能够独立运行的spring项目与主流框架的集成。

2、优点

  • 快速构建项目
  • 对主流开发框架的无配置集成
  • 项目可独立运行,无需外部依赖 Servlet 容器
  • 提供运行时的应用监控
  • 极大地提高了开发、部署效率
  • 与云计算的天然集成
  • 自动配置、快速构建项目、快速集成新技术能力 没有冗余代码生成和XML配置的要求
  • 荐使用注解,简化开发

# Thymeleaf模板

# 概述

Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点

  • Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板 + 数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
  • Thymeleaf 开箱即用的特性。它提供标准和 Spring 标准两种方言,可以直接套用模板实现 JSTL、 OGNL 表达式效果,避免每天套模板、改 JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • Thymeleaf 提供 Spring 标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

官网地址:https://www.thymeleaf.org/

# 优点

thymeleaf相较于其他模板技术有以下几个优点:

  • 动静结合:页面采用模板+数据的方式,在前端美工手中,可以展示静态页面。在后台开发人员手中,也可以展示数据返回到页面后的界面。这是因为thymeleaf支持html原型,可以在原型上添加额外的属性,浏览器在解释html时会忽视未定义的属性,当定义的属性有值时就会动态替换静态页面,来实现动态展示。
  • 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果
    1. springMVC使用JSTL与EL表达式。
    2. spring MVC默认的jsp页面的标签就是JSTL,而struts2默认的是OGNL标签。
    3. struts2 使用OGNL与EL表达式:OGNL用struts2的自定标签内部。
  • 避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
  • 与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。

总结:本章节大概的表述了项目的目录结构及配置文件内容,下一章节《基础配置》我们将详细的解读配置文件中具体的参数及意义;