代码中的
2、application.yml配置 (1)端口配置src/main/java ***.xml false src/main/resources ***.xml false
server: port: 8080(2)mysql配置
spring:
datasource:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost/byd
reids项目: 1、redis.conf (1)连接配置
# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0 第75行 bind 0.0.0.0 # 守护进程,修改为yes后即可后台运行 第257行 daemonize yes # 监听的端口 port 6379 # 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录 dir . # 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15 databases 1 # 设置redis能够使用的最大内存 maxmemory 512mb # 日志文件,默认为空,不记录日志,可以指定日志文件名 logfile "redis.log"(2)RDB持久化配置
# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱 # 360 行 rdbcompression yes # RDB文件名称 dbfilename dump.rdb # 文件保存的路径目录 dir ./(3)AOF持久化配置
# 是否开启AOF功能,默认是no # 1251 行 appendonly yes # AOF文件的名称 appendfilename "appendonly.aof" # 表示每执行一次写命令,立即记录到AOF文件 appendfsync always # 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案 appendfsync everysec # 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘 appendfsync no # AOF文件比上次文件 增长超过多少百分比则触发重写 auto-aof-rewrite-percentage 100 # AOF文件体积最小多大以上才触发重写 auto-aof-rewrite-min-size 64mb2、application.yml配置 (1)java连接redis
该配置的作用是使java和redis可以连接,主要配置了redis的地址和端口。
spring:
# 配置连接redis的主机地址、端口
redis:
host: 127.0.0.1
port: 6379
(2)java连接redis 哨兵
spring:
redis:
sentinel:
master: mymaster
nodes:
- 192.168.60.129:27001
- 192.168.60.129:27002
- 192.168.60.129:27003
3、配置类
(1)序列化配置
该配置类的作用是让redis中键和值的序列化保持不一致。因为redis中默认键和值的序列化方式是一致的,要么是字符串序列化,要么是对象序列化。但是实际开发中键的数据类型往往是字符串,而值的数据类型往往是对象,因此要在这里配置,使键和值的序列化方式分离避免出现序列化失误的情况。
package com.woniu.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置key的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
//设置value的序列化
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// Jackson2JsonRedisSerializer 这个完成序列化操作
// 不能把 序列化字符串 转成 java 对象
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
// hash类型key的序列化方式
redisTemplate.setHashKeySerializer(stringRedisSerializer);
// hash类型value的序列化方式
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
return redisTemplate;
}
}
(2)读写分离配置
该类是写在springboot启动类中,配置redis的读写分离,其中包括了四种读写策:(1)MASTER:从主节点读取。(2)MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica。(3)REPLICA:从slave(replica)节点读取。(4)REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master。
@Bean
public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){
return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}
3、访问分片集群
(1)读写分离配置
@Bean
public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){
return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}
(2)application.yml配置
spring:
redis:
cluster:
nodes:
- 192.168.60.129:7001
- 192.168.60.129:7002
- 192.168.60.129:7003
- 192.168.60.129:8001
- 192.168.60.129:8002
- 192.168.60.129:8003
Shiro项目: 1、配置类
package com.woniu.config;
import com.woniu.realm.MyRealm;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
@Configuration
public class ShiroConfig {
//进行加密的设置
@Bean
public CredentialsMatcher credentialsMatcher(){
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
// 指定加密算法
matcher.setHashAlgorithmName("md5");
// 迭代次数
matcher.setHashIterations(3);
return matcher;
}
// 新建MyRealm对象的方法
@Bean
public MyRealm createMyRealm(CredentialsMatcher credentialsMatcher){
MyRealm myRealm = new MyRealm();
myRealm.setCredentialsMatcher(credentialsMatcher);
return myRealm;
}
// 新建SecurityManager对象
@Bean
public SecurityManager createSecurityManager(MyRealm myRealm){
DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();
dwsm.setRealm(myRealm);
return dwsm;
}
// 往容器中丢入过滤器
@Bean
public ShiroFilterFactoryBean createShiroFilterFactoryBean(SecurityManager securityManager){
// 新建ShiroFilterFactoryBean对象
ShiroFilterFactoryBean sffb = new ShiroFilterFactoryBean();
sffb.setSecurityManager(securityManager);
HashMap map = new HashMap<>();
// 设置登录页面
sffb.setLoginUrl("/login.html");
// 开放资源
// 1、开发静态资源
map.put("/css
//5.1 开启Aop自动代理
@Bean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator proxy =
new DefaultAdvisorAutoProxyCreator();
// 设置true表示使用子类代理
proxy.setProxyTargetClass(true);
return proxy;
}
//5.2 匹配所有加了权限注解的方法,让权限校验注解生效。注入SecurityManager
@Bean
public AuthorizationAttributeSourceAdvisor advisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor advisor =
new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(securityManager);
return advisor;
}
}
2、自定义realm
package com.woniu.realm;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.woniu.bean.Permission;
import com.woniu.bean.RolePermission;
import com.woniu.bean.User;
import com.woniu.bean.UserRole;
import com.woniu.mapper.UserMapper;
import com.woniu.service.IPermissionService;
import com.woniu.service.IRolePermissionService;
import com.woniu.service.IUserRoleService;
import com.woniu.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import java.util.List;
@Slf4j
public class MyRealm extends AuthorizingRealm {
@Lazy
@Autowired
IUserService userService;
@Lazy
@Autowired
IUserRoleService userRoleService;
@Lazy
@Autowired
IPermissionService permissionService;
@Lazy
@Autowired
IRolePermissionService rolePermissionService;
@Autowired
UserMapper userMapper;
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
// 拿到User,并拿到uid
User user = (User) principalCollection.getPrimaryPrincipal();
Integer uid = user.getUid();
// 拿到rids
QueryWrapper qw = new QueryWrapper<>();
qw.eq("uid",uid);
qw.select("rid");
List
Nginx项目:
nginx主要修改的配置文件是nginx.conf,nginx的三大主要功能是反向代理、负载均衡和动静分离三个方面,因此我从这三个方面对项目配置文件进行介绍。
1、反向代理 (1)单服务器nginx.conf配置类最主要修改的地方主要有两个,下图绿色框标记的地方是配置nginx主机的地址和端口。而红色框的位置配置的是要反向代理的服务器的位置。
server {
listen 80;
server_name 120.22.22.177;
location /sys1 {
proxy_pass http://120.22.22.133:8080;
}
}
(2)多服务器
多服务器配置与单服务器略有不同。被代理的服务器写在外部,即下图红框外部。并用绿框的代码代替外部红框的代码。当外部有请求时,会先找到nginx的地址,之后再找到被代理服务器的位置,寻找顺序如下图所示。
upstream mysever {
server 120.22.22.133:8080;
server 120.22.22.177:8080;
}
server {
listen 80;
server_name 120.22.22.177;
location / {
proxy_pass http://mysever;
}
}
2、负载均衡
(1)轮巡
upstream mysever {
server 120.22.22.133:8080;
server 120.22.22.177:8080;
}
server {
listen 80;
server_name 120.22.22.177;
location / {
proxy_pass http://mysever;
}
}
(2)权重
weight权重,默认为1,权重越高被分配的客户端越多。指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream mysever {
server 120.22.22.133:8080 weight=1;
server 120.22.22.177:8080 weight=2;
}
server {
listen 80;
server_name 120.22.22.177;
location / {
proxy_pass http://mysever;
}
}
(3)哈希
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream mysever {
ip_hash;
server 120.22.22.133:8080 weight=1;
server 120.22.22.177:8080 weight=2;
}
server {
listen 80;
server_name 120.22.22.177;
location / {
proxy_pass http://mysever;
}
}
(4)第三方
fair(第三方): 在 Nginx 中使用 fair 模块(第三方)来实现负载均衡,fair 采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、响应时间智能的进行负载均衡。按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream mysever {
fair;
server 192.168.12.136:8080;
server 192.168.12.136:8081;
}
nginx-upstream-fair-master.zip
3、动静分离
红框的位置配置 nginx内部服务器的位置
upstream mysever {
server 120.22.22.133:8080;
server 120.22.22.177:8080;
}
server {
listen 80;
server_name 120.22.22.177;
location / {
proxy_pass http://mysever;
}
}
docker 项目 1、Dockerfile 文件
FROM centos:7 MAINTAINER heRUN yum install -y vim WORKDIR /usr CMD /bin/bash
mybatis-plus项目 1、自动代码生成器 (1)运行类
该类写在启动类的文件夹下。
public class AutoGenerator {
public static void main(String[] args) {
FastAutoGenerator.create(
"jdbc:mysql://localhost/byd",
"1234",
"1234")
// 全局配置
.globalConfig(builder -> {
builder.author("vampire") // 设置作者
.enableSwagger() // 开启 swagger 模式
.outputDir("D:\code\java\smart_sys_baidu\src\main\java"); // 指定输出目录
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.woniu") // 设置父包名
.controller("controller") //controller
.service("service") //service
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper")
.entity("bean");
})
//表的配置
.strategyConfig(builder -> {
builder.addInclude("comprehensive"); // 设置需要生成的表名
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
System.out.println("成功了...");
}
}
(2)maven依赖
不添加此依赖会报错。
2、日志配置org.freemarker freemarker2.3.28
写在pom.xml文件中作为日志的配置。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
ElasticSearch项目 1、配置类
该配置类保证了java可以连接ES并进行操作。
package com.hk.hotel.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class EsConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
return new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://120.22.22.177:9200")
));
}
}



