SpringBoot集成SSM、Dubbo、Redis、JSP的案例小结及思路讲解
这个案例其实就是SpringBoot集成SSM、Dubbo、Redis、JSP,看起来集成了一大堆,感觉挺麻烦的,但实际上并不是很麻烦,下面我来说一下我的思路:
接口工程:存放实体bean和业务接口
服务提供者:它是一个SpringBoot框架web项目,集成MyBatis、Redis
1)pom文件中添加依赖:MyBatis、MySQL驱动、Dubbo、zookeeper、redis、接口工程。
2)配置springboot核心配置文件(连接数据库、连接redis、dubbo、内嵌tomcat)
服务消费者:它也是一个SpringBoot框架web项目,集成JSP、Dubbo
2)配置springboot核心配置文件(dubbo、内嵌tomcat、视图解析器)
1)pom文件中添加依赖:Dubbo、zookeeper、接口工程、解析jsp页面的依赖。
文章比较长,因为代码比较多,大家一定要有这个耐心去看完,相信我讲的还是有点用的!!!
2.案例分析这里SpringBoot集成MyBatis,我用的是MyBatis逆向工程来直接生成的实体bean、dao、mapper,所以这里首先给出MyBatis逆向工程的配置文件。
这个文件主要是负责生成你项目中的实体bean、dao、mapper,那么再加上集成dubbo的情况下,我们的实体bean是需要放在接口工程中的,而dao、mapper则需要放在服务提供者中,所以在MyBatis逆向工程的配置文件中,需要将实体bean的生成位置改为第一个接口工程的绝对路径。数据库这里的表结构和数据,我就不再给出了,大家自行创建一下就可以了。
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE generatorConfigurationPUBLIC '-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN''http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd'><generatorConfiguration><!-- 指定连接数据库的 JDBC 驱动包所在位置,指定到你本机的完整路径 --><classPathEntry location='E:mysql-connector-java-5.1.9.jar'/><!-- 配置 table 表信息内容体,targetRuntime 指定采用 MyBatis3 的版本 --><context targetRuntime='MyBatis3'> <!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 --> <commentGenerator><property name='suppressAllComments' value='true'/> </commentGenerator> <!-- 配置数据库连接信息 --> <jdbcConnection driverClass='com.mysql.jdbc.Driver' connectionURL='jdbc:mysql://localhost:3306/springboot' userId='root' password='12345678'> </jdbcConnection> <!-- 生成 entity 类,targetPackage 指定 entity 类的包名, targetProject指定生成的 entity 放在 IDEA 的哪个工程下面--> <javaModelGenerator targetPackage='com.szh.springboot.entity'targetProject='D:BaiduNetdiskDownload014-springboot-ssm-dubbo-interfacesrcmainjava'><property name='enableSubPackages' value='false'/><property name='trimStrings' value='false'/> </javaModelGenerator> <!-- 生成 MyBatis 的 Mapper.xml 文件,targetPackage 指定 mapper.xml 文件的包名, targetProject 指定生成的 mapper.xml 放在 IDEA 的哪个工程下面 --> <sqlMapGenerator targetPackage='com.szh.springboot.mapper' targetProject='src/main/java'><property name='enableSubPackages' value='false'/> </sqlMapGenerator> <!-- 生成 MyBatis 的 Mapper 接口类文件,targetPackage 指定 Mapper 接口类的包名, targetProject 指定生成的 Mapper 接口放在 IDEA 的哪个工程下面 --> <javaClientGenerator type='XMLMAPPER' targetPackage='com.szh.springboot.mapper' targetProject='src/main/java'><property name='enableSubPackages' value='false'/> </javaClientGenerator> <!-- 数据库表名及对应的 Java 模型类名 --> <table tableName='t_student' domainObjectName='Student' enableCountByExample='false' enableUpdateByExample='false' enableDeleteByExample='false' enableSelectByExample='false' selectByExampleQueryId='false'/></context></generatorConfiguration>2.1 接口工程
MyBatis逆向工程生成的实体bean。
package com.szh.springboot.entity; import java.io.Serializable; public class Student implements Serializable { private Integer id; private String name; private Integer age; //getter and setter}
接口服务,其中有两个方法。
package com.szh.springboot.service; import com.szh.springboot.entity.Student; /** * */public interface StudentService { Student queryStudentById(Integer id); Integer queryAllStudentCount();}2.2 服务提供者
SpringBoot核心配置文件
# 配置内嵌tomcat端口号和上下文根server.port=8081server.servlet.context-path=/ # 设置连接数据库的信息spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=12345678 # 设置dubbospring.application.name=015-springboot-ssm-dubbo-providerspring.dubbo.server=truespring.dubbo.registry=zookeeper://localhost:2181 # 设置redisspring.redis.host=localhostspring.redis.port=6379
MyBatis逆向工程生成的dao接口和对应的mapper映射文件(这里就做一个简单的案例,所以只用到了 selectByPrimaryKey、queryAllStudentCount 这两个方法)
package com.szh.springboot.mapper; import com.szh.springboot.entity.Student; public interface StudentMapper { int deleteByPrimaryKey(Integer id); int insert(Student record); int insertSelective(Student record); Student selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Student record); int updateByPrimaryKey(Student record); Integer queryAllStudentCount(); }
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'><mapper namespace='com.szh.springboot.mapper.StudentMapper'> <resultMap type='com.szh.springboot.entity.Student'> <id column='id' jdbcType='INTEGER' property='id' /> <result column='name' jdbcType='VARCHAR' property='name' /> <result column='age' jdbcType='INTEGER' property='age' /> </resultMap> <sql id='Base_Column_List'> id, name, age </sql> <select parameterType='java.lang.Integer' resultMap='BaseResultMap'> select <include refid='Base_Column_List' /> from t_student where id = #{id,jdbcType=INTEGER} </select> <delete parameterType='java.lang.Integer'> delete from t_student where id = #{id,jdbcType=INTEGER} </delete> <insert parameterType='com.szh.springboot.entity.Student'> insert into t_student (id, name, age ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER} ) </insert> <insert parameterType='com.szh.springboot.entity.Student'> insert into t_student <trim prefix='(' suffix=')' suffixOverrides=','> <if test='id != null'>id, </if> <if test='name != null'>name, </if> <if test='age != null'>age, </if> </trim> <trim prefix='values (' suffix=')' suffixOverrides=','> <if test='id != null'>#{id,jdbcType=INTEGER}, </if> <if test='name != null'>#{name,jdbcType=VARCHAR}, </if> <if test='age != null'>#{age,jdbcType=INTEGER}, </if> </trim> </insert> <update parameterType='com.szh.springboot.entity.Student'> update t_student <set> <if test='name != null'>name = #{name,jdbcType=VARCHAR}, </if> <if test='age != null'>age = #{age,jdbcType=INTEGER}, </if> </set> where id = #{id,jdbcType=INTEGER} </update> <update parameterType='com.szh.springboot.entity.Student'> update t_student set name = #{name,jdbcType=VARCHAR}, age = #{age,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER} </update> <select resultType='java.lang.Integer'> select count(*) from t_student </select></mapper>
对接口工程中接口方法的实现,其中包括注入数据库持久层、注入redis模板类对象。
package com.szh.springboot.service.impl; import com.alibaba.dubbo.config.annotation.Service;import com.szh.springboot.entity.Student;import com.szh.springboot.mapper.StudentMapper;import com.szh.springboot.service.StudentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * */@Component@Service(interfaceClass = StudentService.class,version = '1.0.0',timeout = 15000)public class StudentServiceImpl implements StudentService { @Autowired private StudentMapper studentMapper; @Autowired private RedisTemplate<Object,Object> redisTemplate; @Override public Student queryStudentById(Integer id) {return studentMapper.selectByPrimaryKey(id); } @Override public Integer queryAllStudentCount() { //首先去redis缓存中查询,如果有:直接使用;如果没有,去数据库中查询并存放到redis缓存中Integer allStudentCount= (Integer) redisTemplate.opsForValue().get('allStudentCount'); //判断是否有值if (allStudentCount==null) { //此时为空,则去数据库中查询 allStudentCount=studentMapper.queryAllStudentCount(); //并存放到redis缓存中 redisTemplate.opsForValue().set('allStudentCount',allStudentCount,30, TimeUnit.SECONDS);}return allStudentCount; } }
pom文件
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version></dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions><exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId></exclusion> </exclusions></dependency><dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version></dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version></dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version></dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency> <!-- 接口工程 --><dependency> <groupId>com.szh.springboot</groupId> <artifactId>014-springboot-ssm-dubbo-interface</artifactId> <version>1.0.0</version></dependency> </dependencies> <build> <resources> <resource><directory>src/main/java</directory><includes> <include>**/*.xml</include></includes> </resource></resources> <plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--mybatis 代码自动生成插件--> <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration> <!--配置文件的位置--> <configurationFile>GeneratorMapper.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite></configuration> </plugin></plugins> </build>
SpringBoot项目启动入口类
package com.szh.springboot; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication@MapperScan(basePackages = 'com.szh.springboot.mapper')@EnableDubboConfigurationpublic class Application { public static void main(String[] args) {SpringApplication.run(Application.class, args); } }2.3 服务消费者
SpringBoot核心配置文件
# 配置内嵌tomcat端口号和上下文根server.port=8080server.servlet.context-path=/ # 设置dubbospring.application.name=016-springboot-ssm-dubbo-consumerspring.dubbo.registry=zookeeper://localhost:2181 # 配置视图解析器spring.mvc.view.prefix=/spring.mvc.view.suffix=.jsp
定义控制层,其中有两个请求方法
package com.szh.springboot.controller; import com.alibaba.dubbo.config.annotation.Reference;import com.szh.springboot.entity.Student;import com.szh.springboot.service.StudentService;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody; /** * */@Controllerpublic class StudentController { @Reference(interfaceClass = StudentService.class,version = '1.0.0',check = false) private StudentService studentService; @RequestMapping(value = '/student/detail/{id}') public String studentDetail(@PathVariable('id') Integer id,Model model) {Student student=studentService.queryStudentById(id);model.addAttribute('student',student);return 'studentDetail'; } @GetMapping(value = '/student/all/count') public @ResponseBody Object allStudentCount() {Integer allStudentCount=studentService.queryAllStudentCount();return '学生总人数为:' + allStudentCount; } }
pom文件
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version></dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions><exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId></exclusion> </exclusions></dependency><dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version></dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId></dependency> <!-- 接口工程 --><dependency> <groupId>com.szh.springboot</groupId> <artifactId>014-springboot-ssm-dubbo-interface</artifactId> <version>1.0.0</version></dependency> </dependencies> <build> <resources> <resource><directory>src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes> <include>*.*</include></includes> </resource></resources> <plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build>
响应的jsp页面、SpringBoot项目启动入口类
<%@ page contentType='text/html;charset=utf-8' language='java' %><html><head> <title>$</title></head><body> <h3>学生信息</h3> <div>学生编号:${student.id}</div> <div>学生姓名:${student.name}</div> <div>学生年龄:${student.age}</div></body></html>
package com.szh.springboot; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication@EnableDubboConfigurationpublic class Application { public static void main(String[] args) {SpringApplication.run(Application.class, args); } }2.4 启动测试!!!
因为我们这个案例是SpringBoot集成SSM、Dubbo、Redis、JSP,同时使用注册中心。所以启动的步骤是:
启动zookeeper注册中心 zkServer.cmd(我这里为了考虑电脑性能,所以直接就在Windows上启动了,推荐是在Linux上启动) 启动redis服务(redis-server.exe redis,windows.conf 、 redis-cli.exe -h 127.0.0.1 -p 6379) 启动服务提供者(对应该工程的SpringBoot项目启动入口类)启动服务消费者(对应该工程的SpringBoot项目启动入口类)测试结果中,可以看到,第一个请求结果拿到了学生信息,第二个请求结果也查询出了学生数量,而且我们开启redis服务之后,可以看到发起第二个请求之后,redis缓存中已经有了这个 allStudentCount 数据,经过30秒之后,这个数据会被清除。
以上就是SpringBoot集成SSM、Dubbo、Redis、JSP的案例小结及思路讲解的详细内容,更多关于SpringBoot集成SSM、Dubbo、Redis、JSP的资料请关注好吧啦网其它相关文章!
相关文章: