(2)公众号开发-基础框架搭建

article/2025/10/8 15:49:33

公众号开发-基础框架搭建

本专栏说明以及源码地址:微信开发专栏说明

项目介绍

在开发之前我们需要搭建一个基础的框架

本项目是基于SpringBoot 2.X构建,按子模块拆分

项目结构

项目结构主要分为4大基础模块(觉得不够的可以自己扩展),

common模块:通用的工具类、枚举类、配置类等

core模块:公众号接入必备的核心业务都写在这里

framework模块:框架的依赖的配置如Redis配置、数据配置、Mybatis配置等

web模块:你自己定制化的业务都写在这里

在这里插入图片描述

技术选型

项目主要涉及到的依赖组件有

系统环境:Docker,Java8,Maven

主框架:SpringBoot 2.X

持久层:mysql,MyBatis-plus 3.x,alibaba-druid 1.x

缓存:Redis

依赖添加

父pom文件

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><java.version>1.8</java.version><springboot.version>2.1.4.RELEASE</springboot.version><httpclient.version>4.5.2</httpclient.version><fastjson.version>1.2.62</fastjson.version><dom4j.version>1.6.1</dom4j.version><lombok.version>1.16.22</lombok.version><mybatisPlus.version>3.3.2</mybatisPlus.version><druid.version>1.1.22</druid.version><mysql.version>8.0.15</mysql.version><p6spy.version>3.9.0</p6spy.version><junit.version>4.12</junit.version><lang3.version>3.9</lang3.version><commonsio.version>2.6</commonsio.version>
</properties>
<dependencies><!--springboot 相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> <!-- 表示依赖不会传递 --></dependency><!-- commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commonsio.version}</version></dependency><!-- 数据库监控 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!-- 数据库连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--框架配置依赖--><dependency><groupId>com.jolyoulu</groupId><artifactId>framework</artifactId><version>1.0-SNAPSHOT</version></dependency><!--通用依赖--><dependency><groupId>com.jolyoulu</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency><!--核心模块--><dependency><groupId>com.jolyoulu</groupId><artifactId>core</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>

common

<dependencies><!--springboot 相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!-- lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- 阿里json工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!-- dom4j解析器 --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId></dependency><!--http 请求相关--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency>
</dependencies>

core

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>com.jolyoulu</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>

framework

<dependencies><!-- SpringBoot Web容器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.jolyoulu</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>

web

<dependencies><!--springboot 相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> <!-- 表示依赖不会传递 --></dependency><!-- commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commonsio.version}</version></dependency><!-- 数据库监控 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!-- 数据库连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--框架配置依赖--><dependency><groupId>com.jolyoulu</groupId><artifactId>framework</artifactId><version>1.0-SNAPSHOT</version></dependency><!--通用依赖--><dependency><groupId>com.jolyoulu</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency><!--核心模块--><dependency><groupId>com.jolyoulu</groupId><artifactId>core</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>

项目构建设置

web

在web的pom文件中添加如下内容,配置项目热部署,以及构建时跳过测试

<build><plugins><!--jar启动springboot项目--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.1.RELEASE</version><configuration><fork>true</fork> <!-- 如果没有该配置,devtools不会生效 --></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- maven 打包时跳过测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins>
</build>

框架组件配置

框架组件的配置类都创建在framework模块下

并发定时任务配置

由于Springboot默认的定时任务是多线程阻塞执行的效率低,通过实现SchedulingConfigurer接口可以实现并发执行定时任务

在framework包下创建一个类并且实现SchedulingConfigurer返回一个定时任务线程池即可

在这里插入图片描述

Redis序列化配置

默认提供的Redis使用会经常的出现一些莫名其妙的问题,而且默认的Redis序列化使用的是Serializable序列化效率低,我们修改使用Jackson进行序列化

在这里插入图片描述

配置类的源文件在这,这也是一个通用的Redis配置文件

@Configuration
@EnableCaching
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);//Json序列化配置Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);//string的序列化StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();//key采用string的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用string的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
}

线程池注入Bean工厂

注入一个线程池到SpringBoot中这样我们可以使用@Autowired获取到这个线程池,方便使用而且可复用

在这里插入图片描述

编写yml文件

由于项目开发时候会分多个配置,生产环境、测试环境,这里yml编写使用文件后缀区分不同环境

application.yml

application.yml 里面是没有内容的,里面使用 spring.profiles.active: dev切换不同的配置文件

application-dev.yml

server:port: 80servlet:context-path: /tomcat:uri-encoding: UTF-8# 日志配置
logging:level:top.jolyoulu: debugorg.springframework: warnspring:# redis 配置redis:# 地址host: localhost# 端口,默认为6379port: 6379# 数据库索引database: 1# 密码password:# DataSource Configdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/weixin?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=UTCusername: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSourcedruid:# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大initial-size: 5min-idle: 5max-active: 200# 配置获取连接等待超时的时间max-wait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000validation-query: SELECT 1test-while-idle: truetest-on-borrow: falsetest-on-return: false# 打开PSCache,并且指定每个连接上PSCache的大小pool-prepared-statements: true#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙max-pool-prepared-statement-per-connection-size: 20filters: stat,walluse-global-data-source-stat: true# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# 配置监控服务器stat-view-servlet:login-username: adminlogin-password: 123456reset-enable: falseurl-pattern: /druid/*# 添加IP白名单#allow:# 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高#deny:web-stat-filter:# 添加过滤规则url-pattern: /*# 忽略过滤格式exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"

编写启动类

在web模块中编写启动类Application

@EnableScheduling开启定时任务

@MapperScan("top.jolyoulu.mapper")Mybatis扫码包路径

在这里插入图片描述

测试启动

启动时如没发现任何报错表示启动成功,基础项目框架以及搭建完成了

在这里插入图片描述


http://chatgpt.dhexx.cn/article/3KbyMubW.shtml

相关文章

搭建企业级微信公众号管理平台(二)----WxJava框架快速开发微信公众号

1.WxJava 微信公众号框架初体验 WxJava 微信公众号框架 https://github.com/Wechat-Group/WxJava //下载xwjava全量的SDK代码 git clone https://github.com/Wechat-Group/WxJava.git //下载 git clone https://github.com/binarywang/weixin-java-mp-demo-springboot.git…

Java微信公众号开发之开源框架推荐

1.微信公众平台开发者文档 http://mp.weixin.qq.com/wiki/home/index.html 2.微信公众平台 https://mp.weixin.qq.com/ 3.第三方api weixin4j https://github.com/foxinmy/weixin4j http://www.oschina.net/p/weixin4j 依赖 mpsdk4j https://github.com/elkan1788/m…

微信公众号开发---基本框架配置

上一章&#xff0c;我们已经初步讲解了微信公众账号开发的基本原理&#xff0c;今天我们来探索设计实现。 首先我们设计了模块层次图&#xff0c;当然图中只是给出一种实现方式&#xff0c;不局限于此。具体见下图。 主要功能介绍如下&#xff1a; 1&#xff09;请求接口层。处…

微信公众号之开发者工具

一、前言 这次的项目主要是关于微信公众号的一个开发,本人这次分配的模块是后台微信公众号的支付和退款,第一次接触微信公众的项目刚开始一脸懵逼,开发过程中遇到各种坑,所以想自己写一篇详细的关于微信公众号的开发,希望能对小伙伴们有所帮助!在开发过程中会设计到微信接…

微信公众号 几种移动端UI框架介绍

微信公众号 几种移动端UI框架介绍 微信公众号开发&#xff0c;主要是移动端网页的页面开发&#xff0c;在这里推荐3个移动端UI框架&#xff1a;WeUI、SUI和Mint UI。 1. WeUI 1.1 WeUI WeUI是微信官方设计团队为微信 Web 开发量身设计&#xff0c;可以令用户在HTML5应用中的使用…

微信公众号号开发小记(六)使用开源框架开发

到了现在&#xff0c;必须要正视一个问题了&#xff0c;之前所作的都是不推荐的&#xff0c;为什么&#xff0c;因为你没发现之前咱们还在调用官方API接口吗&#xff1f;还在写程序去获取token机械json数据呢&#xff1f;而且json数据咱们还要自己拼接&#xff0c;这可是不行的…

WxJava微信公众号开发实战

本文从本人博客搬运&#xff0c;原文格式更加美观&#xff0c;可以移步原文阅读&#xff1a;WxJava微信公众号开发实战 之前我们介绍了Java如何进行微信公众号开发&#xff0c;阅读本文前小伙伴们可以先去了解下Java微信公众号开发 之前我们开发微信公众号时&#xff0c;都是…

【程序源代码】微信公众号开发框架

关键字&#xff1a;java 管理系统 公众号开发框架 正文 | 内容 01 — 【概述】 本项目基于Spring Cloud 和Ant Design Pro实现前后端管理平台一站式脚手架&#xff0c;便于快速开发企业级应用。 02 — 【技术框架】 软件架构 核心框架&#xff1a;Spring Boot 2.2.5.RELEAS…

微信公众号开发(三)前端界面

有问题可以关注公众号&#xff1a;提着月亮去火星 由于该公众号主要的用途是用于公司售后服务,经沟通确定相关需求. 第一: 了解相关的UI框架,最终选定了Jquery-WeUI框架. 第二: 制作简单案例,在移动端进行测试,要达到移动端的自适应. 目前完成三个界面如下: 上面的就是 目前…

Java开发微信公众号之整合weixin-java-tools框架开发微信公众号

微信开发者接入文档 &#xff1a; https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1421135319 微信公众平台测试账号申请&#xff1a; http://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 一、前言 首先&#xff0c;在要做微信项目开发前&#xf…

微信公众号开发入门

实在是太折腾&#xff0c;太难懂了。也太坑了。 下面是这几天来&#xff0c;有关微信公众号的工作总结。算不上全面&#xff0c;只是作为一个初学者的记录&#xff0c;仅以备忘。 一、微信公众号开发&#xff0c;开发什么&#xff1f; 公众号与小程序不同。小程序类似手机AP…

微信公众平台快速开发框架源码

ASP.NET微信快速开发框架源码 微信公众平台快速开发框架源码 框架主要技术&#xff1a; ASP.NET MVC5、ASP.NET Identity、Bootstrap、KnockoutJs、Entity Framework等。 主要特色&#xff1a; 快速迭代开发&#xff0c;提供最好的威信开发框架&#xff1b; 基于ASP.NET MVC5Bo…

微信公众号开发,原来这么简单?[java框架]

终于有时间更新啦&#xff01;&#xff01;最新教程双手奉上&#xff01;公众号开发之wx-toolsspringboot应用实战-音乐爬虫推送[JAVA] 下面都是旧的教程&#xff0c;建议参考上面最新的教程~~ 可能你不知道&#xff0c;有个框架叫wx-tools&#xff08;小心翼翼地说&#xff09…

公众号开发(2) —— 盛派.net SDK + vue搭建微信公众号网页开发框架

需求&#xff1a;通过微信公众号菜单跳转到手机端网页&#xff0c;跳转后通过微信授权登录获取微信公众号用户的OpenId&#xff08;用户关注公众号后&#xff0c;用户在公众号的唯一凭证&#xff09;&#xff0c;通过OpenId和后台数据库用户信息绑定起来并实现一些业务逻辑。 技…

微信公众号开发框架讲解

微信公众号的开发在基于微信给的开发文档基础上&#xff0c;特别做微商城那底层用Java框架会相当方便。下面长沙Java培训给大家具体讲讲微信公众号开发框架&#xff1a; 核心框架&#xff1a;Spring Boot2 Spring Cloud Alibaba Spring Cloud Gateway 配置中心、注册中心&am…

人工智能博弈树极大极小搜索算法alpha-beta剪枝实现五子棋,带禁手

由于2020的特殊情况&#xff0c;导致了一个被拖了挺久的大作业。。。。 五子棋其实大家很多时候会在闲暇时刻和朋友随便玩玩&#xff0c;这不仅让我回忆起了高中时候摸鱼休息就喜欢和同学在自己打的格子中用铅笔来一盘五子棋&#xff0c;回想起来确实是至今以来最快乐的一段时光…

基于Python的人机交互的五子棋博弈树搜索

1. 算法原理 1.1 博弈树 博弈树针对的是二人零和博弈的问题&#xff0c;二人轮流行动&#xff0c;行动时令自己的优势最大。二人零和博弈有如下特点&#xff1a; 确定性&#xff1a;二人的行动有多种选择&#xff0c;但最终的行动是确定的信息完备性&#xff1a;博弈双方知道…

C++实现基于博弈树的5x5一子棋人机对战

基于博弈树的5x5一子棋人机对战 919106840637实验2 这是智能计算三个课程实验的第二个实验&#xff0c;即博弈树搜索 。我之前对博弈树的了解不多&#xff0c;所以实现起来比较的简略&#xff0c;仅仅是基本达到了要求 实验语言 C 实验内容 实践博弈树搜索——“5x5格子的一…

人工智能作业——搜索树博弈树一阶逻辑表达式CNF范式

1. 人工智能定义 1. 简述什么是人工智能 人工智能可分为两个维度:一个维度是从思维推理过程到行为结果(过程与结果);另一个维度是与人类表现的逼真度到数学与工程结合后的精确性(主观与客观)。 像人—样行动&#xff1a;图灵测试的途径&#xff1b;像人—样思考&#xff1a;认…

AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台

AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言一、AlphaBeta剪枝是什么&#xff1f;1.由来, 最大最小决策树2.发展3. AlphaBeta剪枝 二、实验算法伪代码三、实验算法代码四、实验结果在这里插入图片描述 五、感谢 前言 产生本文的缘由 人工智能原理课程 可选实验 “…