Skip to content

Commit

Permalink
调整pom
Browse files Browse the repository at this point in the history
  • Loading branch information
KeRan213539 committed Dec 2, 2020
1 parent 37ec646 commit e743437
Show file tree
Hide file tree
Showing 9 changed files with 334 additions and 240 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,11 @@
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>

<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-logappender</artifactId>
</dependency>


<!-- 以上来自原来的web-api-starter,由于web-api-starter已改为webflux的,但是目前认证服务器无法webflux,所以把原来MVC时的 web-api-starter 应用的相关jar包挪到这 -->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="600" shutdownHook="disable">
<!-- 将一些常用值提取出来,然后在文件的其他部分通过${}的形式引用,这些值可以随便定义 -->
<Properties>
<!-- 定义日志文件根目录 -->
<Property name="logDir" value="/home/weihu/deploy/logs/alita/" />
<!-- 定义日志的通用格式 -->
<Property name="genericPattern" value="[authorization-log]-%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
<!-- 定义日志分卷文件通用文件名形式 -->
<Property name="genericFilePattern" value="%d{yyyy-MM-dd HH:mm}-%i" />
</Properties>
<!-- appender们的定义 -->
<Appenders>
<!-- 定义一个console类型定定义,如果需要,可以以这个为原型粘贴复制修改再定义适合自己的 -->
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="${genericPattern}" />
</Console>

<RocketMQ name="rocketmqAppender" producerGroup="alitaLogGroup" nameServerAddress="@log.rocketMQ.address@" topic="alitaLog-new" tag="authorizationWebapiLog">
<PatternLayout pattern="${genericPattern}" />
</RocketMQ>

<!-- 定义一个文件appender,如果需要,可以以这个为原型粘贴复制修改再定义适合自己的,该appender的详细解释会在教程接下来的部分给出
<RollingRandomAccessFile name="appApiFileAppender" fileName="${logDir}/appApi.log"
filePattern="${logDir}/appApi-${genericFilePattern}.log" append="true">
<PatternLayout pattern="${genericPattern}" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
<SizeBasedTriggeringPolicy size="2 MB" />
</Policies>
<DefaultRolloverStrategy max="1000000" compressionLevel="9" />
</RollingRandomAccessFile>
-->
</Appenders>
<!-- 定义logger们 -->
<Loggers>
<!-- 定义根logger,根logger是必须的,这里我把根logger定义为异步的,也可为定义为普通的同步的,但是注意在同步根logger和异步根logger中只能存在一个,不能两个都配置 -->
<asyncRoot level="INFO">
<AppenderRef ref="consoleAppender" />
</asyncRoot>
<!-- 普通的根logger,注意,跟上面的异步跟root同时只能存在一个 -->
<!-- <Root level="trace"> <AppenderRef ref="consoleAppender" /> </Root> -->
<!-- 定义一个普通的logger,这里我定义为异步的 -->
<!-- additivity 表式是否向根 longer输出,由于上面配制的根是控制台,所以这里配为ture -->
<asyncLogger name="top.klw8.alita.authorization" level="info">
<AppenderRef ref="rocketmqAppender" />
</asyncLogger>
<!-- 定义一个普通的logger -->
<!-- additivity 表式是否向根 longer输出,这里是另一种配法: 配制为false,下面配制向控制台输出
<Logger name="com.foo.Bar.common" level="info" additivity="false">
<AppenderRef ref="consoleAppender" />
<AppenderRef ref="rollingRandomAccessFileAppender" />
</Logger>
-->

<!-- 指定包的日志级别 ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF.-->
<logger name="org.springframework" level="ERROR" />
<logger name="com.alibaba" level="ERROR" />
<logger name="org.apache.zookeeper" level="ERROR" />
</Loggers>
</Configuration>

<!-- 配制说明:
1. 首先看<Configuration>元素,log4j2框架自己也有一系列日志,比如框架初始化日志或者初始化失败日志什么的。
status表示应该记录哪个等级的log4j2自身的日志,一般情况下WARN就行,如果出现了了WARN等级的日志,说明你的log4j2框架的用法有问题,就要及时排查排查了。
log4j2支持自动更新配置文件,也就是说不用重启服务器,直接改log4j2的配置文件,它就能自动重新加载,起作用,完全碾压log4j,monitorInterval表示应该多久检测一次更新,单位:秒,默认5秒。
2. 再看<Properties>,它里面包含<Property>,就是把一些通用的值提出来,在配置的其他地方已${}的形式引用而已。
3. <Appenders>元素,官方文档表示有还有一种异步appender,但是效能提升及其有限,而且在多线程情况下有可能出现问题,所以不建议使用,本教程不讨论那个。
官方文档有很多种类型的appender,但是平常工作中常用的也就是console类型和file类型的,console类型appender输出到控制台,方便开发调试用,file类型appender类型输出到文件,用在生产环境记录日志。
console类型appender没得选,只有这一种,结构很简单,不用多说。
file类型appender有多种类型,本教程建议使用<RollingRandomAccessFile>类型,因为这种类型的fileAppender有缓存功能,效率比RollingFile高(网上很多教程都是几年前的了,用的还是RollingFile),
所以只讨论这种类型。fileName表示日志文件名,filePattern表示日志文件分卷的分卷文件的文件名(日志文件分卷就是某些情况,比如每天生成一个文件,或者单个日志文件超过100MB时自动分成多个日志文件),
fileName如果已.zip结尾表示启用压缩功能,那些分卷好的日志文件会被压缩,某些情况会很有用。如果不想启用压缩功能,就不要已.zip或者其他压缩文件后缀结尾。PatternLayout表示日志格式,不必多说。
Policies是触发日志文件分卷的条件。TimeBasedTriggeringPolicy表示按照时间来分卷,interval表示时间间隔,时间单位有点诡异,不是明确设置的,而是从filePattern推导的,是filePattern中最小的时间的单位,
比如上述示例中的filePattern为%d{yyyy-MM-dd},这个日期时间格式必须符合java日期时间规范,其中最小日期单位为dd,也就是天,推导出来也就是1天分一个日志文件出来,
如果filePattern的配置为%d{yyyy-MM-dd HH:mm},最小单位是mm,也就是分钟,那就是1分钟分一个日志文件出来,如果interval为3,那就是3天一个日志文件和3分钟一个日志文件,
推导规则就是如此。SizeBasedTriggeringPolicy表示日志文件大小超过多大时对其进行分卷,size表示日志大小,单位推荐写MB,数值为大于0的整数,100 MB中间有个空格,推荐写上。
DefaultRolloverStrategy表示分卷策略,只需要记住这个必须要配就行了,不必深究,max表示最多可以有多少个分卷文件,默认为7个,超出7个的日志分卷文件将被删除,也就是说可能导致重要日志丢失,所以该参数配大点,100000应该够了,
compressionLevel表示压缩等级,值为0-9,只在filePattern以.zip结尾,也就是说压缩格式为zip时起作用,这也是为什么前面说建议压缩格式为zip。
0表示不压缩,只打包为zip格式,9表示最高压缩比(个人测试1MB日志文件某些情况下能压缩到4KB左右)。如果不想启用压缩功能,前面说过,日志filePattern不以.zip结尾就行了,这时compressionLevel是不起作用的。
4. <Loggers>表示配置各种logger的地方。
根logger是必需的,可配置为普通的,也可配置问异步的,但是只能配置一种,不能两种都配置。
其他的普通logger配置很简单,不必多说,可根据需要配置为普通logger或者异步logger,至于选择异步的还是普通的,教程前半部分已经说过,
如果日志记录代码跟业务逻辑代码是有关系的,最好选普通logger,如果真的只是单纯为了记个日志,建议配置异步logger。根logger没有additivity属性,
普通logger和异步logger有additivity属性。additivity设置为false是为了防止当前logger向父logger发送日志,导致日志被重复记录。至于log4j2的logger的父子关系,
可以看这里http://logging.apache.org/log4j/2.x/manual/architecture.html。总的来说就是类似java体系的父子关系,跟logger相当于是java体系中的Object类,
是所有logger的父logger,所以所有logger的日志都会被添加到根logger中,所以给每个(除了根logger)添加additivity=”false”是很有必要的,可以避免记录大量重复的日志。
-->
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package top.klw8.alita.service.authority;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import top.klw8.alita.entitys.authority.SystemAuthoritys;
import top.klw8.alita.entitys.authority.SystemAuthoritysCatlog;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ spring:
nacos:
discovery:
serverAddr: 127.0.0.1:8848
namespace: cb525a6a-d6c7-4082-bfd9-8ddbcc5aa823
namespace: yd-alita-web-service
group: YD_ALITA_BASE_GROUP
autoUpdateRoute:
enable: true
runSecond: 10
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@
<groupId>top.klw8.alita</groupId>
<artifactId>alita-service-mongodb-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -1,109 +1,109 @@
package top.klw8.alita.starter.cfg;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.config.MongoConfigurationSupport;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.util.Assert;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;

import top.klw8.alita.config.beans.mongodb.MongoConfigBean;

/**
* @ClassName: SpringDataMongoDbConfig
* @Description: spring-data-mongodb 非 Reactive 的配制
* @author klw
* @date 2018-12-21 16:33:12
*/
@Configuration
@EnableConfigurationProperties(MongoConfigBean.class)
@EnableMongoRepositories
public class SpringDataMongoDbConfig extends MongoConfigurationSupport {

@Resource
private MongoConfigBean mongoConfigBean;

public MongoClient mongoClient() {
Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
Assert.hasText(mongoConfigBean.getConnectUrl(), "mongodb 连接字符串不能为空");
return new MongoClient(new MongoClientURI(mongoConfigBean.getConnectUrl()));
}

@Bean
public MongoDbFactory mongoDbFactory() {
return new SimpleMongoDbFactory(mongoClient(), getDatabaseName());
}

@Override
protected String getDatabaseName() {
Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
Assert.hasText(mongoConfigBean.getDbName(), "mongodb 数据库名不能为空");
return mongoConfigBean.getDbName();
}

@Override
protected Collection<String> getMappingBasePackages() {
Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
List<String> mapPackages = mongoConfigBean.getMapPackages();
Assert.notEmpty(mapPackages, "要扫描并映射的包路径不能为空");
return mapPackages;
}

public MappingMongoConverter mappingMongoConverter() throws Exception {
// 一定要把 MappingMongoConverter 配制成 Bean,否则自定义转换器不生效!!!
// 纠结了N个小时,就是差了这个 !!!
// DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
// MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext());
// List<Converter<?, ?>> converters = new ArrayList<>();
// converters.add(LongIdToIdConverter.INSTANCE);
// converters.add(IdToLongIdConverter.INSTANCE);
// converter.setCustomConversions(new MongoCustomConversions(converters));
// converter.setCustomConversions(new MongoCustomConversions(Collections.emptyList()));
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
MongoCustomConversions conversions = new MongoCustomConversions(Collections.emptyList());

MongoMappingContext mappingContext = new MongoMappingContext();
mappingContext.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
mappingContext.afterPropertiesSet();

MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mappingContext);
converter.setCustomConversions(conversions);
converter.afterPropertiesSet();
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
// 去掉保存到数据中的 _class 字段
// MappingMongoConverter converter = mappingMongoConverter();
// converter.setTypeMapper(new DefaultMongoTypeMapper(null));
// return new MongoTemplate(mongoDbFactory(), converter);

return new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
}

}
//package top.klw8.alita.starter.cfg;
//
//import java.util.Collection;
//import java.util.Collections;
//import java.util.List;
//
//import javax.annotation.Resource;
//
//import com.mongodb.MongoClientURI;
//import com.mongodb.client.MongoClient;
//import com.mongodb.reactivestreams.client.internal.MongoClientImpl;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.mongodb.MongoDatabaseFactory;
//import org.springframework.data.mongodb.config.MongoConfigurationSupport;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
//import org.springframework.data.mongodb.core.convert.DbRefResolver;
//import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
//import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
//import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
//import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
//import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
//import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
//import org.springframework.util.Assert;
//
//import top.klw8.alita.config.beans.mongodb.MongoConfigBean;
//
///**
// * @author klw
// * @ClassName: SpringDataMongoDbConfig
// * @Description: spring-data-mongodb 非 Reactive 的配制
// * @date 2018-12-21 16:33:12
// */
//@Configuration
//@EnableConfigurationProperties(MongoConfigBean.class)
//@EnableMongoRepositories
//public class SpringDataMongoDbConfig extends MongoConfigurationSupport {
//
// @Resource
// private MongoConfigBean mongoConfigBean;
//
// public MongoClient mongoClient() {
// Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
// Assert.hasText(mongoConfigBean.getConnectUrl(), "mongodb 连接字符串不能为空");
//// return new MongoClientImpl(new MongoClientURI(mongoConfigBean.getConnectUrl()));
// // TODO
// return null;
// }
//
// @Bean
// public MongoDatabaseFactory mongoDbFactory() {
// return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
// }
//
// @Override
// protected String getDatabaseName() {
// Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
// Assert.hasText(mongoConfigBean.getDbName(), "mongodb 数据库名不能为空");
// return mongoConfigBean.getDbName();
// }
//
// @Override
// protected Collection<String> getMappingBasePackages() {
// Assert.notNull(mongoConfigBean, "mongodb 配置不能为空");
// List<String> mapPackages = mongoConfigBean.getMapPackages();
// Assert.notEmpty(mapPackages, "要扫描并映射的包路径不能为空");
// return mapPackages;
// }
//
// public MappingMongoConverter mappingMongoConverter() throws Exception {
// // 一定要把 MappingMongoConverter 配制成 Bean,否则自定义转换器不生效!!!
// // 纠结了N个小时,就是差了这个 !!!
// // DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
// // MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext());
// // List<Converter<?, ?>> converters = new ArrayList<>();
// // converters.add(LongIdToIdConverter.INSTANCE);
// // converters.add(IdToLongIdConverter.INSTANCE);
//
// // converter.setCustomConversions(new MongoCustomConversions(converters));
// // converter.setCustomConversions(new MongoCustomConversions(Collections.emptyList()));
//
// DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
// MongoCustomConversions conversions = new MongoCustomConversions(Collections.emptyList());
//
// MongoMappingContext mappingContext = new MongoMappingContext();
// mappingContext.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
// mappingContext.afterPropertiesSet();
//
// MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mappingContext);
// converter.setCustomConversions(conversions);
// converter.afterPropertiesSet();
// converter.setTypeMapper(new DefaultMongoTypeMapper(null));
//
// return converter;
// }
//
// @Bean
// public MongoTemplate mongoTemplate() throws Exception {
// // 去掉保存到数据中的 _class 字段
// // MappingMongoConverter converter = mappingMongoConverter();
// // converter.setTypeMapper(new DefaultMongoTypeMapper(null));
// // return new MongoTemplate(mongoDbFactory(), converter);
//
// return new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
// }
//
//}
Loading

0 comments on commit e743437

Please sign in to comment.