从Spring迁移到Spring Boot的方法步骤

从Spring迁移到SpringBoot主要需要将项目的配置文件进行改造,主要的改造点是将原来手动配置的部分,改为使用SpringBoot提供的依赖自动配置的机制。下面是从Spring迁移到SpringBoot的方法步骤:

1. 配置文件的改造

SpringBoot采用了约定优于配置的原则,它提供了一些默认的配置,让我们可以快速地启动和搭建项目。因此,在迁移的过程中,需要进行配置文件的改造,使其符合SpringBoot的配置规范。

1.1 将原来手动配置的部分改为自动配置

Spring提供了一系列的自动配置模块,称为starter,它们会自动配置Spring应用程序所需的所有常见属性。在迁移的过程中,需要将原来手动配置的部分,改为使用SpringBoot提供的依赖自动配置的机制。

比如,我们原来手动配置了一个JdbcTemplate,代码如下所示:

@Configuration
public class JdbcTemplateConfig {

    @Autowired
    private DataSource dataSource;

    @Bean(name = "jdbcTemplate")
    public JdbcTemplate jdbcTemplate() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

}

在SpringBoot中,我们只需要在pom.xml中引入spring-boot-starter-jdbc依赖,就可以自动配置一个JdbcTemplate了,不需要手动配置。代码如下所示:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

1.2 改配置文件的命名和位置

SpringBoot采用的默认配置文件是properties文件或者是yml文件,而且文件名和位置都有一定的约定。比如,我们的主配置文件名应该为application.properties或者application.yml,位置应该放在classpath:根目录下。

1.3 配置文件中的属性改为SpringBoot的属性

在SpringBoot中,有很多默认的属性值。我们要用这些属性来替换原来手动设置的那些属性。

2. 代码的改造

在迁移的过程中,需要对一些代码进行修改,以适应SpringBoot的规范。

2.1 修改启动类

SpringBoot的启动类不同于原来的启动类,需要进行修改,使其符合SpringBoot的规范。

比如,我们原来的启动类如下所示:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

在SpringBoot中,我们只需要在pom.xml中引入spring-boot-starter-web依赖,就可以使用@SpringBootApplication注解代替原来的@Configuration、@ComponentScan、@EnableAutoConfiguration注解。代码如下所示:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

2.2 修改Controller和Service的注解

在SpringBoot中,我们可以使用@RestController代替原来的@Controller和@ResponseBody注解,用@Service代替原来的@Service注解,用@Autowired代替原来的@Inject和@Resource注解。

比如,我们原来的Controller代码如下所示:

@Controller
@RequestMapping("/user")
public class UserController {

    @Inject
    private UserService userService;

    @ResponseBody
    @RequestMapping("/list")
    public List<User> list() {
        return userService.list();
    }

}

在SpringBoot中,我们需要将代码改为如下所示:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<User> list() {
        return userService.list();
    }

}

示例:

示例1: SpringBoot整合Redis

现在我们有一个使用Spring开发的项目,而我们想把这个项目转为使用SpringBoot开发。首先我们来看看如何整合Redis。

  1. 将pom.xml中的spring-data-redis、jedis、fastjson依赖改为如下所示:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
</dependency>
  1. 新建RedisConfig类,代码如下所示:
@Configuration
public class RedisConfig {

    @Value("${redis.host}")
    private String host;

    @Value("${redis.port}")
    private int port;

    @Value("${redis.timeout}")
    private int timeout;

    @Value("${redis.pool.max-total}")
    private int maxTotal;

    @Value("${redis.pool.max-idle}")
    private int maxIdle;

    @Value("${redis.pool.max-wait}")
    private int maxWaitMillis;

    @Bean
    public JedisPool redisPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);

        return new JedisPool(jedisPoolConfig, host, port, timeout);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setDefaultSerializer(fastJson2JsonRedisSerializer());
        template.setKeySerializer(new StringRedisSerializer());
        return template;
    }

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName(host);
        jedisConnectionFactory.setPort(port);
        jedisConnectionFactory.setPoolConfig(jedisPoolConfig());
        jedisConnectionFactory.setTimeout(timeout);
        jedisConnectionFactory.afterPropertiesSet();

        return jedisConnectionFactory;
    }

    @Bean
    public Pool<Jedis> jedisPool() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(maxTotal);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMaxWaitMillis(maxWaitMillis);

        JedisPool jedisPool = new JedisPool(poolConfig, host, port, timeout);
        return jedisPool;
    }

    @Bean
    public RedisSerializer<Object> fastJson2JsonRedisSerializer() {
        FastJson2JsonRedisSerializer<Object> serializer = new FastJson2JsonRedisSerializer<>(Object.class);
        return serializer;
    }

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMaxWaitMillis(maxWaitMillis);
        return config;
    }
}
  1. 在application.properties中添加如下配置:
redis.host=127.0.0.1
redis.port=6379
redis.timeout=6000
redis.pool.max-total=1024
redis.pool.max-idle=200
redis.pool.max-wait=1000
  1. 修改UserController代码,让它使用Redis缓存数据:
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<User> list() {
        String key = "user:list";
        ValueOperations<String, Object> valueOps = redisTemplate.opsForValue();
        // 先从缓存中获取数据,如果缓存中有,则不查询数据库
        Object userObj = valueOps.get(key);
        if (userObj != null) {
            List<User> users = (List<User>) userObj;
            return users;
        }

        List<User> users = userService.list();
        valueOps.set(key, users);
        return users;
    }
}

示例2: SpringBoot整合MyBatis

现在我们有一个使用Spring开发的项目,而我们想把这个项目转为使用SpringBoot开发。接下来我们来看看如何整合MyBatis。

  1. 将pom.xml中的spring-boot-starter-jdbc依赖改为如下所示:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  1. 将pom.xml中的mysql-connector-java依赖改为如下所示:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
  1. 创建一个DataSourceConfig类,代码如下所示:
@Configuration
@MapperScan(basePackages = "com.example.mapper") // 扫描所有Mapper接口
public class DataSourceConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.url}")
    private String url;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        return dataSource;
    }

}
  1. 将mybatis的配置文件mybatis-config.xml中的内容改为如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>
  1. 修改UserService代码,让它使用MyBatis查询数据库:
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> list() {
        return userMapper.list();
    }
}
  1. 创建一个UserMapper接口,代码如下所示:
@Mapper
public interface UserMapper {
    List<User> list();
}
  1. 在application.properties中添加如下配置:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
  1. 修改UserController代码,让它使用MyBatis查询数据库:
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<User> list() {
        return userService.list();
    }

}

这样,我们就完成了将Spring项目迁移到SpringBoot并整合Redis和MyBatis的过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从Spring迁移到Spring Boot的方法步骤 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • JavaScript实现城市选择控件的效果

    实现城市选择控件的效果可以分为以下几个步骤: 1. 编写HTML代码 通过HTML代码,我们可以创建城市选择控件需要的元素。示例代码如下: <input type="text" id="city-picker" placeholder="请选择省/市/区" readonly> <d…

    Java 2023年6月15日
    00
  • java连接mysql数据库实现单条插入和批量插入

    Java连接MySQL数据库实现单条插入和批量插入的攻略如下: 步骤1:下载MySQL Connector/J驱动 在Java中连接MySQL数据库需要用到MySQL Connector/J驱动,我们可以从MySQL官网(https://dev.mysql.com/downloads/connector/j/)上下载最新版本的Connector/J驱动,根据…

    Java 2023年5月19日
    00
  • SpringSecurity导致SpringBoot跨域失效的问题解决

    首先需要明确的是,Spring Boot是默认开启CSRF保护的。而Spring Security也是默认开启CSRF保护的。当二者共存时,常常会产生CSRF保护机制引起的跨域问题。那么如何解决SpringSecurity导致SpringBoot跨域失效的问题呢?下面给出完整攻略。 1. 禁用Spring Security的CSRF保护 第一种解决方式是禁用…

    Java 2023年5月20日
    00
  • java二分查找插入法

    当需要在已排序数组中查找元素时,可以使用二分查找算法。如果需要向已排序数组中插入元素,可以使用二分查找插入法。 二分查找插入法的主要思路是通过二分查找找到需要插入的元素在数组中的位置,然后将该元素插入到该位置中。以下是具体的步骤: 首先,定义需要查询的元素 target 和已排序的数组 nums,同时记录数组的左右端点 left 和 right。 计算需要查…

    Java 2023年5月19日
    00
  • Java学习之Lambda表达式的使用详解

    Java学习之Lambda表达式的使用详解 什么是Lambda表达式? Lambda表达式是Java 8中引入的一个新特性。它可以将一个方法或一个匿名内部类作为参数作为输入传递,也可以在没有类的情况下声明和调用一个函数。Lambda表达式的语法如下: (parameters) -> expression or statement block 这个语法包…

    Java 2023年5月26日
    00
  • Java中解密微信加密数据工具类

    Java中解密微信加密数据工具类 – 完整攻略 对于开发微信小程序的开发者而言,解密微信加密数据是一个重要的任务。为了提供更好的开发体验,我们可以利用Java来解密微信加密数据,本文将详细讲解Java中解密微信加密数据的完整攻略。 前置条件 在开始讲解如何在Java中解密微信加密数据之前,我们需要做好以下几个前置条件: 在微信官方平台上注册自己的小程序,并获…

    Java 2023年5月23日
    00
  • IDEA中创建maven项目引入相关依赖无法下载jar问题及解决方案

    下面是详细讲解“IDEA中创建maven项目引入相关依赖无法下载jar问题及解决方案”的完整攻略。 问题描述 在使用IntelliJ IDEA创建Maven项目时,通过编辑POM.XML文件引入相关依赖,但是发现IDEA无法下载所需的JAR包,导致项目无法编译运行。 可能原因 上述依赖库不存在。 依赖库被墙了。 IDEA配置问题。 解决方案 方案一:更改本地…

    Java 2023年5月19日
    00
  • Spring Security 基于URL的权限判断源码解析

    下面我来详细讲解“Spring Security 基于URL的权限判断源码解析”的完整攻略。 1. 前置知识准备 在深入了解 Spring Security 基于 URL 权限判断的源码之前,我们需要先对以下概念有所了解: 身份验证(Authentication):验证用户的身份,通常需要用户提供用户名和密码等身份凭证。 授权(Authorization):…

    Java 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部