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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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
相关文章
|
23小时前
|
Java Maven Spring
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
|
7天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
52 14
|
7天前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
38 11
|
23小时前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
48 0
|
8天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
25 5
|
6天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
49 1
SpringBoot入门(7)- 配置热部署devtools工具
|
29天前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
66 8
|
26天前
|
前端开发 JavaScript Java
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
36 1
|
27天前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
40 1