Commit 126aef37 authored by xd's avatar xd

community init

parent f37c37d4
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.tanpu</groupId>
<artifactId>community-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>community-api</artifactId>
<dependencies>
<dependency>
<groupId>com.tanpu</groupId>
<artifactId>common</artifactId>
</dependency>
</dependencies>
</project>
package com.tanpu.community.api;
import com.tanpu.common.api.CommonResp;
import com.tanpu.community.api.beans.AlertReq;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@Api(tags = "告警")
public interface CommunityApi {
@ApiOperation("企业微信机器人告警")
@PostMapping("/api/wework-robot-alert")
CommonResp<List<AlertReq>> weworkRobotAlert(@RequestBody AlertReq alertReq);
}
package com.tanpu.community.api;
/**
* monitor系统常量
*/
public final class CommunityConstant {
public static final String WEB_BASE_PATH = "/community";
public static final String PACKAGE_BASE = "com.tanpu.community";
}
package com.tanpu.community.api.beans;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@ApiModel
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlertReq {
private String uid;
private String project;
private String trigger;
private String condition;
private String context;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.tanpu</groupId>
<artifactId>community-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>community-service</artifactId>
<dependencies>
<dependency>
<groupId>com.tanpu</groupId>
<artifactId>community-api</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>app</finalName>
</build>
</project>
package com.tanpu.community;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan({"com.tanpu.common", "com.tanpu.community"})
public class CommunityApplication {
public static void main(String[] args) {
SpringApplication.run(CommunityApplication.class, args);
}
}
package com.tanpu.community.config;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import com.ctrip.framework.apollo.spring.boot.ApolloAutoConfiguration;
import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.LinkedList;
import java.util.List;
/**
* created by xd on 2021/5/27
*/
@Component
@Slf4j
@ConditionalOnProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED)
@AutoConfigureAfter(ApolloAutoConfiguration.class)
public class ApolloRefresherConfig implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@ApolloConfigChangeListener(value = {"application.yml"})
public void onChange(ConfigChangeEvent changeEvent) {
refreshProperties(changeEvent);
}
private void refreshProperties(ConfigChangeEvent changeEvent) {
log.info("Refreshing properties! changedKeys:" + changeEvent.changedKeys());
List<ConfigChange> changes = new LinkedList<>();
for (String changedKey : changeEvent.changedKeys()) {
changes.add(changeEvent.getChange(changedKey));
}
log.info("Refreshing properties! changes:" + StringUtils.join(changes, "\n"));
this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
}
}
package com.tanpu.community.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* created by xd on 2019/9/29
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
package com.tanpu.community.config;
import com.tanpu.community.api.CommunityConstant;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* created by xd on 2021/5/17
*/
@Configuration
public class SwaggerConfig {
ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("community title")
.description("community description")
.version("1.0.0")
.build();
}
@Bean
public Docket restApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(CommunityConstant.PACKAGE_BASE))
.paths(PathSelectors.any())
.build();
return docket;
}
}
package com.tanpu.community.dao;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.tanpu.community.api.CommunityConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* created by xd on 2021/6/3
*/
@Configuration
@Slf4j
@MapperScan(basePackages = CommunityConstant.PACKAGE_BASE + ".dao.mapper", sqlSessionTemplateRef = "communitySqlSessionTemplate")
public class CommunityDataSourceConfig {
@ConfigurationProperties(prefix = "spring.datasource.community")
@Bean(name = "communityDataSource")
@Primary
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "communitySqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("communityDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
"classpath*:mapper/community/*.xml"));
return bean.getObject();
}
@Bean(name = "communityTransactionManager")
@Primary
public DataSourceTransactionManager communityTransactionManager(@Qualifier("communityDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "communitySqlSessionTemplate")
@Primary
public SqlSessionTemplate communitySqlSessionTemplate(@Qualifier("communitySqlSessionFactory")
SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package com.tanpu.community.dao.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.SuperBuilder;
/**
* created by xd on 2021/6/5
*/
@Data
@SuperBuilder
@TableName(value = "alert_info")
public class AlertInfoEntity extends BaseEntity {
private String content;
}
package com.tanpu.community.dao.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
/**
* created by xd on 2021/6/5
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity {
@TableId(type = IdType.AUTO)
private Integer id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String createBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String updateBy;
private Integer deleteTag;
}
package com.tanpu.community.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tanpu.community.dao.entity.AlertInfoEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* created by xd on 2021/6/5
*/
@Mapper
public interface AlertInfoMapper extends BaseMapper<AlertInfoEntity> {
}
package com.tanpu.community.service;
import com.tanpu.community.dao.entity.AlertInfoEntity;
import com.tanpu.community.dao.mapper.AlertInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* created by xd on 2021/6/6
*/
@Service
public class CommunityService {
@Autowired
private AlertInfoMapper alertInfoMapper;
public void saveAlertInfo(String content) {
AlertInfoEntity entity = AlertInfoEntity.builder().content(content).createBy("SYS").build();
alertInfoMapper.insert(entity);
}
}
package com.tanpu.community.web;
import com.tanpu.common.api.CommonResp;
import com.tanpu.common.util.JsonUtil;
import com.tanpu.community.api.CommunityApi;
import com.tanpu.community.api.beans.AlertReq;
import com.tanpu.community.service.CommunityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import java.util.LinkedList;
import java.util.List;
/**
* created by xd on 2021/6/5
*/
@Slf4j
@RestController
public class CommunityController implements CommunityApi {
@Autowired
private CommunityService communityService;
@Override
public CommonResp<List<AlertReq>> weworkRobotAlert(AlertReq alertReq) {
communityService.saveAlertInfo(JsonUtil.toJson(alertReq));
return CommonResp.success(new LinkedList<>());
}
}
# apollo
apollo.bootstrap.enabled: false
app.id: tanpu-community
apollo:
meta: http://dev-apollo.tamp-innner.com:8080
cacheDir: ./apollocache/
bootstrap:
namespaces: application.yml
spring:
zipkin:
enabled: false
spring.datasource:
community:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://dev-mysql.tamp-innser.com3306/tamp_community?useUnicode=true&characterEncoding=utf-8&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=CONVERT_TO_NULL&allowMultiQueries=true&rewriteBatchedStatements=true
username: dev
password: qimeng123
maxActive: 2
minIdle: 2
initialSize: 2
management:
endpoints:
web:
exposure:
include: "*"
jmx:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
# apollo
apollo.bootstrap.enabled: true
app.id: tanpu-community
apollo:
meta: http://prod-apollo.tamp-innner.com:8080
cacheDir: ./apollocache/
bootstrap:
namespaces: application.yml
server:
port: 8190
servlet:
context-path: /community
spring.servlet:
multipart:
max-file-size: 20MB
max-request-size: 5MB
# apollo
apollo.bootstrap.enabled: true
app.id: tanpu-community
apollo:
meta: http://prod-feo-apollo.tamp-innner.com:8080
cacheDir: ./apollocache/
bootstrap:
namespaces: application.yml
spring.application.name: tanpu-community
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="15 seconds">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_PATH" value="/data/logs"/>
<property name="LOG_FILE" value="app"/>
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-){faint} %clr([%t]){faint} %clr(%logger{60}:%line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/>
<property name="FILE_LOG_PATTERN"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } - [%t] %logger{60}:%line : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-default}"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- info日志记录器,日期滚动记录 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
<append>true</append>
<file>${LOG_PATH}/${LOG_FILE}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${LOG_FILE}_%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>128MB</maxFileSize>
<totalSizeCap>2GB</totalSizeCap>
<!--日志文件保留天数 -->
<MaxHistory>14</MaxHistory>
</rollingPolicy>
</appender>
<!-- ERROR日志记录器,日期滚动记录 -->
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
<append>true</append>
<file>${LOG_PATH}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error_%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>128MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
<MaxHistory>14</MaxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
<appender-ref ref="errorFile"/>
</root>
</configuration>
CREATE TABLE alert_info
(
`id` INTEGER(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`content` VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '名称',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`create_by` varchar(32) NOT NULL DEFAULT 'SYS' COMMENT '创建人',
`update_by` varchar(32) NOT NULL DEFAULT 'SYS' COMMENT '修改人',
`delete_tag` tinyint NOT NULL DEFAULT 0 COMMENT '标记删除',
PRIMARY KEY (id)
);
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tanpu</groupId>
<artifactId>community-parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>community-parent</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<spring.boot.version>2.3.11.RELEASE</spring.boot.version>
<spring-cloud.version>Hoxton.SR11</spring-cloud.version>
<project.version>1.0.0-SNAPSHOT</project.version>
</properties>
<modules>
<module>community-api</module>
<module>community-service</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tanpu</groupId>
<artifactId>community-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tanpu</groupId>
<artifactId>common</artifactId>
<version>1.0.2-RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>aliyun-repos</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://maven.tanpuyun.com:8089/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://maven.tanpuyun.com:8089/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment