Spring Boot常见企业开发场景应用、自动配置原理结构分析(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Spring Boot常见企业开发场景应用、自动配置原理结构分析

Spring Boot常见企业开发场景应用、自动配置原理结构分析(一)https://developer.aliyun.com/article/1423059


  1. 编写DAO
public interface UserDao {
 User get(int id);
 List findAll();
 void add(User user);
}
@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
 // 注入SessionFactory
 @Autowired
 public void autoWiredFactory(SessionFactory sessionFactory) {
  super.setSessionFactory(sessionFactory);
 }
 @Override
 public User get(int id) {
  return getHibernateTemplate().get(User.class, id);
 }
 @Override
 public List findAll() {
  return getHibernateTemplate().findByExample(new User());
 }
 @Override
 public void add(User user) {
  getHibernateTemplate().save(user);
 }
}
  1. 编写Service
public interface UserService {
 /**
  * 根据ID获取用户
  * @param i
  * @return
  */
 User get(int id);
 /**
  * 查询所有用户
  * @return
  */
 List findAll();
 /**
  * 新增用户
  * @param user
  */
 void add(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService{
 @Autowired
 private UserDao userDao;
 @Override
 public User get(int id) {
  return userDao.get(id);
 }
 @Override
 public List findAll() {
  return userDao.findAll();
 }
 @Override
 public void add(User user) {
  userDao.add(user);
 }
}
  1. 编写Controller/Handler
@Controller
@RequestMapping("/user")
public class UserController {
 @Autowired
 private UserService userService;
 @RequestMapping("/findUserList")
 public String findUserList(Model model) {
  List list = userService.findAll();
  model.addAttribute("list", list);
  return "/index.jsp";
 }
}
  1. JSP页面参见Servlet/JSP案例
  2. 编写Spring Boot入口
@SpringBootApplication
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class);
 }
 @Bean
 @ConfigurationProperties(prefix="c3p0")
 public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException {
  return new ComboPooledDataSource();
 }
 @Bean
 @ConfigurationProperties(prefix="hibernate")
 public LocalSessionFactoryBean sessionFactory() throws PropertyVetoException {
  LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
  sessionFactoryBean.setDataSource(c3p0DataSource());
  return sessionFactoryBean;
 }
 @Bean
 public HibernateTransactionManager transactionManager() throws PropertyVetoException {
  HibernateTransactionManager tx = new HibernateTransactionManager();
  tx.setSessionFactory(sessionFactory().getObject());
  return tx;
 }
}
  1. 注意:此处因为Hibernate没有Starter起步依赖,所以我使用了Java配置来整合Hibernate。第一个Bean是C3P0数据源,第二个Bean是SessionFactory,第三个Bean是事务管理器。
  2. 编写配置文件
server.port=10086
server.context-path=/
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///springboot
c3p0.user=root
c3p0.password=000000
hibernate.packagesToScan=com.itheima.springboot.entity

构建SSM应用(Spring、Spring MVC、MyBatis)

为了简单起见,这里使用逆向工程生成实体类、Mapper接口、Mapper映射文件。因为查询实体、映射文件的代码比较长,这里就不把代码贴上来了,大家自己使用逆向工程生成下就OK。

  1. 导入依赖

 

org.springframework.boot
    spring-boot-starter-parent
    1.5.14.RELEASE
        org.springframework.boot
        spring-boot-starter-web
        org.springframework.boot
        spring-boot-starter-jdbc
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        1.3.1
        org.apache.tomcat.embed
        tomcat-embed-jasper
        provided
        mysql
        mysql-connector-java
        5.1.6
        javax.servlet
        jstl
  1. Service代码
public interface UserService {
 /**
  * 根据ID获取用户
  * @param i
  * @return
  */
 TUser get(int id);
 /**
  * 查询所有用户
  * @return
  */
 List findAll();
 /**
  * 新增用户
  * @param user
  */
 void add(TUser user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService{
 @Autowired
 private TUserMapper userMapper;
 @Override
 public TUser get(int id) {
  return userMapper.selectByPrimaryKey(id);
 }
 @Override
 public List findAll() {
  return userMapper.selectByExample(null);
 }
 @Override
 public void add(TUser user) {
  userMapper.insert(user);
 }
}
  1. Controller代码
@Controller
@RequestMapping("/user")
public class UserController {
 @Autowired
 private UserService userService;
 @RequestMapping("/findUserList")
 public String findUserList(Model model) {
  List list = userService.findAll();
  model.addAttribute("list", list);
  return "/index.jsp";
 }
}
  1. Spring Boot入口应用
@SpringBootApplication
@MapperScan(basePackages="com.itheima.springboot.mapper")
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class);
 }
}
  1. 注意:Spring Boot整合MyBatis需要在Application类上添加@MapperScan,否则不会为Mapper创建代理对象,执行程序失败。
  2. 配置文件
server.port=10086
server.context-path=/
#数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///springboot
spring.datasource.username=root
spring.datasource.password=000000
  1. 这里使用默认的数据源,如果想要使用其他的数据源参照之前的配置即可
  2. 访问http://localhost:10086/user/findUserList

构建SSJPA应用(Spring、Spring MVC、Spring Data JPA)

  1. 导入Maven依赖

 

org.springframework.boot
    spring-boot-starter-parent
    1.5.14.RELEASE
        org.springframework.boot
        spring-boot-starter-web
        org.springframework.boot
        spring-boot-starter-data-jpa
        mysql
        mysql-connector-java
        5.1.6
        javax.servlet
        jstl
        org.apache.tomcat.embed
        tomcat-embed-jasper
        c3p0
        c3p0
        0.9.1

 

  1. 注意:导入了spring-boot-starter-data-jpa依赖
  2. 编写Java实体类,参考SSH整合JPA实体类
  3. 编写DAO
public interface UserRepository extends JpaRepository{
}
  1. (这个代码是真的喜欢)
  2. 编写Service
public interface UserService {
 /**
  * 根据ID获取用户
  * @param i
  * @return
  */
 User get(int id);
 /**
  * 查询所有用户
  * @return
  */
 List findAll();
 /**
  * 新增用户
  * @param user
  */
 void add(User user);
}
1. 编写Controller
@Controller
@RequestMapping("/user")
public class UserController {
 @Autowired
 private UserService userService;
 @RequestMapping("/findUserList")
 public String findUserList(Model model) {
  List list = userService.findAll();
  model.addAttribute("list", list);
  return "/index.jsp";
 }
}
1. 编写入口
@SpringBootApplication
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class);
 }
 @Bean(name="datasource")
 @Primary
 @ConfigurationProperties(prefix="c3p0")
 public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException {
  return new ComboPooledDataSource();
 }
}
1. 配置文件
server.port=10086
server.context-path=/
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///springboot
c3p0.user=root
c3p0.password=000000
构建FreeMarker应用程序
1. 导入依赖
  org.springframework.boot
  spring-boot-starter-parent
  1.5.14.RELEASE
   org.springframework.boot
   spring-boot-starter-web
   org.springframework.boot
   spring-boot-starter-data-jpa
   mysql
   mysql-connector-java
   5.1.6
   javax.servlet
   jstl
   org.apache.tomcat.embed
   tomcat-embed-jasper
   c3p0
   c3p0
   0.9.1
   org.springframework.boot
   spring-boot-starter-freemarker
  1. 多导入了spring-boot-starter-freemarker起步依赖
  2. 编写DAO
public interface UserRepository extends JpaRepository{
}
1. 编写Service
public interface UserService {
 /**
  * 根据ID获取用户
  * @param i
  * @return
  */
 User get(int id);
 /**
  * 查询所有用户
  * @return
  */
 List findAll();
 /**
  * 新增用户
  * @param user
  */
 void add(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService{
 @Autowired
 private UserRepository userRepository;
 @Override
 public User get(int id) {
  return userRepository.findOne(id);
 }
 @Override
 public List findAll() {
  return userRepository.findAll();
 }
 @Override
 public void add(User user) {
  userRepository.save(user);
 }
}
1. 编写Controller
@Controller
@RequestMapping("/user")
public class UserController {
 // 静态页面输出到的目录
 @Value("${freemarker.output_path}")
 private String OUTPUT_PATH;
 @Autowired
 private UserService userService;
    // 获取FreeMarker配置类
 @Autowired
 private Configuration configuration;
 @RequestMapping("/genPage")
 @ResponseBody
 public Map genPage() throws Exception {
  List list = userService.findAll();
  Map model = new HashMap();
  model.put("list", list);
  Template template = configuration.getTemplate("user_list.ftl");
  template.process(model, new FileWriter(OUTPUT_PATH + "userList.html"));
  Map result = new HashMap();
  result.put("success", true);
  result.put("message", "生成页面成功!");
  return result;
 }
}
1. 编写入口
@SpringBootApplication
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class);
 }
 @Bean(name="datasource")
 @Primary
 @ConfigurationProperties(prefix="c3p0")
 public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException {
  return new ComboPooledDataSource();
 }
}
1. 编写配置文件
server.port=10086
server.context-path=/
# FreeMarker静态页面输出目录
freemarker.output_path=G:/workspace/free_test/t49/src/main/webapp/
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///springboot
c3p0.user=root
c3p0.password=000000
1. 编写FreeMarker模板,此模板默认放在classpath下的template/user_list.ftl中
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
JSP测试
  <#list list as user>
ID
用户名
密码
${user.id}
${user.username}
${user.password}
1. 访问http://localhost:10086/user/genPage,然后检查HTML页面是否生成
构建基于Redis缓存应用程序
1. 导入依赖
 org.springframework.boot
 spring-boot-starter-parent
 1.5.14.RELEASE
 1.8
 org.springframework.boot
 spring-boot-starter-web
 org.springframework.boot
 spring-boot-starter-data-jpa
 mysql
 mysql-connector-java
 5.1.6
 javax.servlet
 jstl
 org.apache.tomcat.embed
 tomcat-embed-jasper
 c3p0
 c3p0
 0.9.1
 org.springframework.boot
 spring-boot-starter-data-redis
1. 要开发导入Redis起步依赖spring-boot-starter-data-redis
2. 编写DAO
 public interface UserRepository extends JpaRepository{
 }
1. 编写Service
public interface UserService {
 /**
  * 根据ID获取用户
  * @param i
  * @return
  */
 User get(int id);
 /**
  * 查询所有用户
  * @return
  */
 List findAll();
 /**
  * 新增用户
  * @param user
  */
 void add(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService{
 @Autowired
 private UserRepository userRepository;
 @Autowired
 private RedisTemplate redisTemplate;
 @Override
 public User get(int id) {
  return userRepository.findOne(id);
 }
 @Override
 public List findAll() {
  Long size = redisTemplate.boundListOps("userList").size();
  List userList = redisTemplate.boundListOps("userList").range(0, size);
  if(userList == null || size == 0) {
   System.out.println("从数据库中获取数据...");
   userList = userRepository.findAll();
   System.out.println("将数据放入缓存...");
   redisTemplate.boundListOps("userList").rightPushAll(userList.toArray(new User[0]));
   return userList;
  }
  else {
   System.out.println("从缓存中获取数据...");
   return userList;
  }
 }
 @Override
 public void add(User user) {
  userRepository.save(user);
 }
}
1. 编写Controller
@Controller
@RequestMapping("/user")
public class UserController {
 @Value("${freemarker.output_path}")
 private String OUTPUT_PATH;
 @Autowired
 private UserService userService;
 @RequestMapping("/findUserList")
 public String findUserList(Model model) {
  List list = userService.findAll();
  model.addAttribute("list", list);
  return "/index.jsp";
 }
}
1. 编写Spring Boot入口
@SpringBootApplication
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class);
 }
 @Bean(name="datasource")
 @Primary
 @ConfigurationProperties(prefix="c3p0")
 public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException {
  ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
  return comboPooledDataSource;
 }
}
1. 编写配置文件
server.port=10086
server.context-path=/
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///springboot
c3p0.user=root
c3p0.password=000000
1. 启动Redis
2. 访问http://localhost:10086/user/findUserList,注意控制台的变化
构建基于ActiveMQ消息队列应用程序
1. 导入依赖
 org.springframework.boot
 spring-boot-starter-parent
 1.5.14.RELEASE
 org.springframework.boot
 spring-boot-starter-web
 org.springframework.boot
 spring-boot-starter-data-jpa
 mysql
 mysql-connector-java
 5.1.6
 javax.servlet
 jstl
 org.apache.tomcat.embed
 tomcat-embed-jasper
 c3p0
 c3p0
 0.9.1
 org.springframework.boot
 spring-boot-starter-freemarker
 org.springframework.boot
 spring-boot-starter-activemq
 com.alibaba
 fastjson
 1.2.28


Spring Boot常见企业开发场景应用、自动配置原理结构分析(三)https://developer.aliyun.com/article/1423061

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
8天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
34 3
|
8天前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
17 1
|
2天前
|
JavaScript Java 关系型数据库
企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
8 0
|
5天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
29 3
|
6天前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
14 0
|
8天前
|
XML Java 数据格式
Spring高手之路18——从XML配置角度理解Spring AOP
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
24 6
Spring高手之路18——从XML配置角度理解Spring AOP
|
8天前
|
消息中间件 开发框架 Java
什么是Spring Boot 自动配置?
Spring Boot 是一个流行的 Java 开发框架,它提供了许多便利的功能和工具,帮助开发者快速构建应用程序。其中一个最引人注目的特性是其强大的自动配置功能。
13 0
|
8天前
|
Java Spring
Spring文件配置以及获取
Spring文件配置以及获取
15 0
|
8天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
109 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
8天前
|
前端开发 Java 应用服务中间件
初始SpringBoot:详解特性和结构
初始SpringBoot:详解特性和结构
14 2