博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot整合Scala构建Web服务
阅读量:6273 次
发布时间:2019-06-22

本文共 7986 字,大约阅读时间需要 26 分钟。

hot3.png

今天我们尝试Spring Boot整合Scala,并决定建立一个非常简单的Spring Boot微服务,使用Scala作为编程语言进行编码构建。

创建项目


  • 初始化项目
mvn archetype:generate -DgroupId=com.edurt.ssi -DartifactId=springboot-scala-integration -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -DinteractiveMode=false
  • 修改pom.xml增加java和scala的支持
4.0.0
com.edurt.ssi
springboot-scala-integration
jar
1.0.0
springboot-scala-integration
SpringBoot Scala Integration is a open source springboot, scala integration example.
org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE
UTF-8
UTF-8
1.8
1.8
1.8
2.12.1
3.1.3
org.scala-lang
scala-library
${dependency.scala.version}
org.springframework.boot
spring-boot-starter-web
${project.basedir}/src/main/scala
${project.basedir}/src/test/scala
net.alchim31.maven
scala-maven-plugin
${plugin.maven.scala.version}
compile
testCompile
org.springframework.boot
spring-boot-maven-plugin
  • 一个简单的应用类
package com.edurt.ssiimport org.springframework.boot.SpringApplicationimport org.springframework.boot.autoconfigure.SpringBootApplication@SpringBootApplicationclass SpringBootScalaIntegrationobject SpringBootScalaIntegration extends App{  SpringApplication.run(classOf[SpringBootScalaIntegration])}

添加Rest API接口功能


  • 创建一个HelloController Rest API接口,我们只提供一个简单的get请求获取hello,scala输出信息
package com.edurt.ssi.controllerimport org.springframework.web.bind.annotation.{GetMapping, RestController}@RestControllerclass HelloController {  @GetMapping(value = Array("hello"))  def hello(): String = {    return "hello,scala"  }}
  • 修改SpringBootScalaIntegration文件增加以下设置扫描路径
@ComponentScan(value = Array(  "com.edurt.ssi.controller"))

添加页面功能


  • 修改pom.xml文件增加以下页面依赖
org.springframework.boot
spring-boot-starter-mustache
  • 修改SpringBootScalaIntegration文件增加以下设置扫描路径ComponentScan的value字段中
"com.edurt.ssi.view"
  • 在src/main/resources路径下创建templates文件夹

  • 在templates文件夹下创建一个名为hello.mustache的页面文件

Hello, Scala

  • 创建页面转换器HelloView
package com.edurt.ssi.viewimport org.springframework.stereotype.Controllerimport org.springframework.web.bind.annotation.GetMapping@Controllerclass HelloView {  @GetMapping(value = Array("hello_view"))  def helloView: String = {    return "hello";  }}
  • 浏览器访问

添加数据持久化功能


  • 修改pom.xml文件增加以下依赖(由于测试功能我们使用h2内存数据库)
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
runtime
  • 修改SpringBootScalaIntegration文件增加以下设置扫描model路径
@EntityScan(value = Array(  "com.edurt.ssi.model"))
  • 创建User实体
package com.edurt.ssi.modelimport javax.persistence.{Entity, GeneratedValue, Id}@Entityclass UserModel {  @Id  @GeneratedValue  var id: Long = 0  var name: String = null}
  • 创建UserSupport dao数据库操作工具类
package com.edurt.ssi.supportimport com.edurt.ssi.model.UserModelimport org.springframework.data.repository.PagingAndSortingRepositorytrait UserSupport extends PagingAndSortingRepository[UserModel, Long] {}
  • 创建UserService服务类
package com.edurt.ssi.serviceimport com.edurt.ssi.model.UserModeltrait UserService {  /**    * save model to db    */  def save(model: UserModel): UserModel;}
  • 创建UserServiceImpl实现类
package com.edurt.ssi.serviceimport com.edurt.ssi.model.UserModelimport com.edurt.ssi.support.UserSupportimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.stereotype.Service@Service(value = "userService")class UserServiceImpl @Autowired() (                                   val userSupport: UserSupport                                 ) extends UserService {  /**    * save model to db    */  override def save(model: UserModel): UserModel = {    return this.userSupport.save(model)  }}
  • 创建用户UserController进行持久化数据
package com.edurt.ssi.controllerimport com.edurt.ssi.model.UserModelimport com.edurt.ssi.service.UserServiceimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.web.bind.annotation.{PathVariable, PostMapping, RequestMapping, RestController}@RestController@RequestMapping(value = Array("user"))class UserController @Autowired()(                                   val userService: UserService                                 ) {  @PostMapping(value = Array("save/{name}"))  def save(@PathVariable name: String): Long = {    val userModel = {      new UserModel()    }    userModel.name = name    return this.userService.save(userModel).id  }}
  • 使用控制台窗口执行以下命令保存数据
curl -X POST http://localhost:8080/user/save/qianmoQ

收到返回结果

1

表示数据保存成功

增加数据读取渲染功能


  • 修改UserService增加以下代码
/** * get all model */def getAll(page: Pageable): Page[UserModel]
  • 修改UserServiceImpl增加以下代码
/**  * get all model  */override def getAll(page: Pageable): Page[UserModel] = {  return this.userSupport.findAll(page)}
  • 修改UserController增加以下代码
@GetMapping(value = Array("list"))def get(): Page[UserModel] = this.userService.getAll(PageRequest.of(0, 10))
  • 创建UserView文件渲染User数据
package com.edurt.ssi.viewimport com.edurt.ssi.service.UserServiceimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.data.domain.PageRequestimport org.springframework.stereotype.Controllerimport org.springframework.ui.Modelimport org.springframework.web.bind.annotation.GetMapping@Controllerclass UserView @Autowired()(                             private val userService: UserService                           ) {  @GetMapping(value = Array("user_view"))  def helloView(model: Model): String = {    model.addAttribute("users", this.userService.getAll(PageRequest.of(0, 10)))    return "user"  }}
  • 创建user.mustache文件渲染数据(自行解析返回数据即可)
{
{users}}
  • 浏览器访问

增加单元功能


  • 修改pom.xml文件增加以下依赖
org.springframework.boot
spring-boot-starter-test
test
junit
junit
org.mockito
mockito-core
org.junit.jupiter
junit-jupiter-engine
test
  • 创建UserServiceTest文件进行测试UserService功能
package com.edurt.ssiimport com.edurt.ssi.service.UserServiceimport org.junit.jupiter.api.Testimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.boot.test.context.SpringBootTestimport org.springframework.data.domain.PageRequest@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)class UserServiceTest @Autowired()(                                    private val userService: UserService) {  @Test  def `get all`() {    println(">> Assert blog page title, content and status code")    val entity = this.userService.getAll(PageRequest.of(0, 1))    print(entity.getTotalPages)  }}

源码地址:

转载于:https://my.oschina.net/shicheng2014/blog/3016851

你可能感兴趣的文章
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
magento2-- 理解自动加载
查看>>
International SEO:多语言多区域网站SEO的快速入门指南
查看>>
180918-JDK之Deflater压缩与Inflater解压
查看>>
redis系列:通过队列案例学习list命令
查看>>
npm发布包的那些事
查看>>
遮罩层 弹框 页面滚动
查看>>
机票分享第一篇 机票由何而来
查看>>
【spring 注解】第1篇:Java基础注解学习
查看>>
Linux命令之awk
查看>>
使用 Flask-Docs 自动生成 Api 文档
查看>>
Angular系列学习三:父子组件之间的交互(常见的组件通讯场景)
查看>>
垃圾回收算法|GC标记-清除算法
查看>>
移除注释的完善思路:真的可以用正则实现?
查看>>
我所了解的CSS包含块
查看>>
vue.js多页面开发 webpack.config.js 配置方式
查看>>
C语言中 变量的生命周期、作用域、类型转换
查看>>
android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码...
查看>>
js代码常见技巧总结
查看>>
初识css层叠上下文
查看>>