当前位置: 首页 > news >正文

【scala】使用gradle和scala构建springboot程序

零、版本说明:

springboot: 2.7.18
使用log4j2,不使用springboot自带的logback
scala版本:2.11
jackson版本:2.16.0

一、依赖:

buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("org.springframework.boot:spring-boot-maven-plugin:2.7.18")}
}
plugins {id 'idea'id 'scala'id 'org.springframework.boot' version '2.7.18'id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
// 指定java版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
// 尽量使用2.16.0版本的jackson对scala支持更好。
ext {jackson_version = '2.16.0'
}dependencies {implementation("org.springframework.boot:spring-boot-starter-web") {exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'}implementation("org.springframework.boot:spring-boot-starter-log4j2")testImplementation("org.springframework.boot:spring-boot-starter-test") {exclude group: 'org.junit.jupiter'}testImplementation 'io.projectreactor:reactor-test:3.4.29'implementation("com.fasterxml.jackson.core:jackson-core:${jackson_version}")implementation("com.fasterxml.jackson.core:jackson-annotations:${jackson_version}")implementation("com.fasterxml.jackson.core:jackson-databind:${jackson_version}")implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson_version}")implementation("com.fasterxml.jackson.module:jackson-module-scala_2.11:${jackson_version}")testImplementation "com.fasterxml.jackson.core:jackson-core:${jackson_version}"testImplementation("com.fasterxml.jackson.core:jackson-annotations:${jackson_version}")testImplementation("com.fasterxml.jackson.core:jackson-databind:${jackson_version}")testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson_version}")testImplementation("com.fasterxml.jackson.module:jackson-module-scala_2.11:${jackson_version}")
}
configurations {all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}

主启动类

此处也可以继承scala的App 但需要注意要重新App中的main方法。

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.{ SpringBootApplication}@SpringBootApplication
class AppServe
object AppServer {private val log = org.slf4j.LoggerFactory.getLogger(classOf[AppServer])def main(args: Array[String]): Unit = {log.info(s"${getClass.getName} get args: ${args.toList.toString()}")SpringApplication.run(classOf[AppServer], args: _*)}
}

springboot序列化使用的是jackson,而自带的jackson版本较低,且不支持scala。

import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.module.scala.{ClassTagExtensions, DefaultScalaModule}
import org.springframework.context.annotation.{Bean, Configuration}
import lombok.extern.slf4j.Slf4j/*** https://blog.csdn.net/beibaozhou1656/article/details/100966023*/
@Configuration
class JacksonConfiguration {@Beandef defaultScalaModule(): Module = {DefaultScalaModule::ClassTagExtensions}
}

controller类

注意:@Resource()@Autowire)使用方法。

import org.springframework.web.bind.annotation.{PostMapping, PutMapping, RequestBody, RequestMapping, RestController}
import lombok.extern.slf4j.Slf4j@Slf4j
@RestController
@RequestMapping(Array("/v1"))
class BatchController @Resource()(batchService: BatchSaveService) {@PostMapping(Array("/batch/save"))def batchSave(@RequestBody tbls: java.util.List[Element]): Unit = {batchService.batch(tbls.asScala)}
}

配置文件值获取

application.properties,application.yml,application.yaml文件

import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import javax.annotation.PostConstruct@Slf4j
@Component
class KerberosEnvConfiguration() {
// 注意:要去除value=s"${}"的`s`。@Value(value = "${udf.kafka.consumer.krb5-conf}") var krb5Conf: String = _@PostConstructdef init(): Unit = {// 使用在post construct之后可以使用krb5Conf变量System.setProperty( ... )}def getConf():String={krb5Conf
}
}
import lombok.extern.slf4j.Slf4j
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.springframework.kafka.annotation.KafkaListener
import org.springframework.stereotype.{Component}
import javax.annotation.Resource/*** kerberos整合kafka、springboot* https://blog.csdn.net/weixin_40496191/article/details/124056953* SpringBoot集成Kafka详解* https://blog.csdn.net/qq_20865839/article/details/13394898*/
@Slf4j
@Component
class KafkaTableService @Resource()(service: CommonServiceImpl)  extends Logging {val mapper = JsonUtils.getMapper
// 可以使用#{}在注解中使用被@Component的的方法。@KafkaListener(topics = Array("#{kerberosEnvConfiguration.getConf()}"))def onMessage(record: ConsumerRecord[String, String]) = {// do nothing}}

注意:

1、springboot打包必须使用spring-boot-maven-plugin,不能使用shadowJar
如下jar目录结构:
在这里插入图片描述

2、idea中debug
在这里插入图片描述3、无需设置main-class,springboot的插件设置。
4、生产环境启动nohub java -jar xxx.jar 2>&1 &

参考文章:

http://www.lryc.cn/news/325021.html

相关文章:

  • Linux sfdisk命令教程:硬盘分区表编辑器(附实例详解和注意事项)
  • Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例
  • 算法打卡day23|回溯法篇03|Leetcode 39. 组合总和、40.组合总和II、131.分割回文串
  • Google研究者们提出了VLOGGER模型
  • Python从入门到精通秘籍十九
  • 解决:您还有0天的时间继续使用internet download manager
  • 操作系统目录
  • 常用的Node.js命令集锦
  • 2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题
  • 80386 ATT汇编语法
  • 如何在Linux系统使用宝塔面板搭建Inis博客并发布至公网【内网穿透】
  • 【漏洞复现】netgear路由器 boarddataww 存在RCE漏洞
  • 什么是原型链
  • 什么是虚拟线程?
  • node.js是什么怎么用常用方法
  • pikachu靶场第十四关——XSS(跨站脚本)之js输出(附代码审计)
  • AD实用设置教程
  • webpack为什么要使用loader,如何手写loader
  • 【银河商学】大蓝短视频学习04——找对标账号
  • Java练手游戏--俄罗斯方块
  • 基础篇Redis
  • 透视变换详解
  • leetcode LCR121.寻找目标值-二维数组
  • 成都百洲文化传媒有限公司引领电商服务新潮流
  • 【C++从练气到飞升】05---运算符重载
  • [leetcode] 994. 腐烂的橘子
  • 如何本地搭建群晖虚拟机并实现无quickconnect服务环境远程访问
  • [Java基础揉碎]final关键字
  • 用OceanBase binlog service 轻松进行数据回滚
  • 【C++】学习记录--condition_variable 的使用