
SpringBoot4.0整合Scala遇到的坑,最新版本的特性支持,手把手带大家搭建整合
1. 先看项目结构
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!

2. 安装scala插件

Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!

3. 依赖POM
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloud.xx</groupId>
<artifactId>xx-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<mysql.connector.version>8.0.16</mysql.connector.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot4-starter</artifactId>
<version>3.5.14</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- 或者使用PostgreSQL兼容驱动 -->
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.8</version>
</dependency>
</dependencies>
<build>
<finalName>cloud-boot-jiabo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>
4. 创建自己的Scala代码

5. 创建自己Scala的启动类
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
scala
package com.cloud.xx
import org.mybatis.spring.annotation.MapperScan
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.scheduling.annotation.EnableScheduling
@MapperScan(Array("com.cloud.xx.mapper"))
@EnableScheduling
@SpringBootApplication
class ApplicationBoot
object ApplicationBoot extends App {
SpringApplication.run(classOf[ApplicationBoot], args: _*)
}
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
6. 创建自己Scala的Controller
scala
package com.cloud.xx.controller
import com.cloud.xx.common.utils.R
import com.cloud.xx.mapper.UserMapper
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.{GetMapping, RequestMapping, RequestParam, RestController}
import scala.collection.convert.ImplicitConversions.`collection AsScalaIterable`
@Tag(name = "用户信息", description = "用户相关接口")
@RestController
@RequestMapping(Array("/user"))
class UserController {
@Autowired
val etsEntityService: UserMapper = null
/**
* 测试Vabase海量数据库FT项目对接
*
* @param id
* @return
*/
@Operation(summary = "测试问好", description = "测试问好")
@GetMapping(Array("getInfo")) def ok(@RequestParam("id") id: String): R[_] = {
import scala.jdk.CollectionConverters._
val entity = etsEntityService.selectList(null)
val list = entity.map { num =>
num.setUserName(num.getUserName + "1")
num
}
R.ok(list.asJava) // 现在是 List[UserEntity],序列化正常
}
}
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
7. 创建自己Scala的Mapper
scala
package com.cloud.xx.mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper
import com.cloud.xx.entity.UserEntity
import org.apache.ibatis.annotations.Mapper
@Mapper
trait UserMapper extends BaseMapper[UserEntity]{
}
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
8. 创建自己Scala的Service
scala
package com.cloud.xx.service
import com.baomidou.mybatisplus.extension.service.IService
import com.cloud.xx.entity.UserEntity
trait UserService extends IService[UserEntity] {
}
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
9. 创建自己Scala的Services实现类
scala
package com.cloud.xx.service.impl
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
import com.cloud.xx.entity.UserEntity
import com.cloud.xx.mapper.UserMapper
import com.cloud.xx.service.UserService
import org.springframework.stereotype.Service
@Service
class UserServiceImpl extends ServiceImpl[UserMapper, UserEntity] with UserService {
}
Spring Cloud全栈实战:手撸企业级项目,从入门到架构师!
接口请求测试

