Gradle文章目录 | |
---|---|
Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】 | |
Java之Gradle【IDEA版】入门到精通(下)(一篇文章精通系列)【创建 Springboot 项目+基于 ssm 多模块项目案例+微服务实战】 |
Java之Gradle【IDEA版】入门到精通(下)(一篇文章精通系列)【创建 Springboot 项目+基于 ssm 多模块项目案例+微服务实战】
1、创建 SpringBoot 项目
Spring Boot Gradle 插件在 Gradle 提供 Spring Boot 支持。它允许您打包可执行 jar 或 war 归档文件,运行 Spring Boot 应用程序,并使用 Spring-Boot-dependencies 提供的依赖管理。相关文档请参考:
https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#running-your-application
设置好对应的配置项
1.1、引入springboot 插件
该插件发布在 Gradle 的插件门户网站上,可以使用插件块来应用:
plugins {
id 'org.springframework.boot' version '2.3.7.RELEASE' //维护springboot版本号,不单独使用,和下面两个插件一起用
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
//进行依赖管理,在引入其它boot依赖时省略版本号、解决jar包冲突问题id 'java'
}
1.2、引入所需要的依赖
implementation 'org.springframework.boot:spring-boot-starter-web'
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/actor")
public class ActorController {
@GetMapping("/name")
public String getActorName(){
return "itbluebox";
}
}
运行
运行成功
默认端口号是8080
访问:http://localhost:8080/actor/name
拓展
//类似maven当中的<dependencyManagement>标签,只做依赖的管理,不做实际依赖
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
1.3、将当前服务打包成jar
1.4、使用脚手架方式创建SpringBoot 项目
https://start.spring.io/
创建成功后自动下载压缩包
解压以后用IDEA打开
如果国外的打不开,可以使用国内的
https://start.aliyun.com/
用法一样
2、拓展spring-boot-gradle-plugin 插件
buildscript {
repositories {
maven {
url 'https://maven.aliyun.com/repository/public'
}
}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.4.1'
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
运行一下
运行成功
http://localhost:8080/actor/name
3、基于SSM多模块项目案例
3.1 多项目模块划分
meinian-mobile-web: | 美年旅游项目的用户系统 |
meinian-web: | 美年旅游项目的管理员系统 |
meinian-service: | 美年旅游项目的业务逻辑层 |
meinian-dao : | 美年旅游项目的持久化层 |
meinian-bean : | 美年旅游项目的Model 封装 |
3.2 项目搭建前配置分析
3.3 代码演示
创建成功
创建成功
创建成功
创建成功
删除根目录下面的src
父工程引入依赖
group 'cn.itbluebox'
version '1.0-SNAPSHOT'
subprojects {
//添加插件
apply plugin: 'java'
//基本JDK配置
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding "UTF-8"
compileTestJava.options.encoding "UTF-8"
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
group 'com.itbluebox'
version '1.0-SNAPSHOT'
repositories {
mavenLocal()
maven {url "https://maven.aliyun.com/repository/public"}
maven {url "https://maven.aliyun.com/repository/central"}
maven {url "https://maven.aliyun.com/repository/google"}
maven {url "https://maven.aliyun.com/repository/spring"}
mavenCentral()
}
//依赖的配置:设置通用的依赖
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
implementation 'log4j:log4j:1.2.17'
}
test {
useJUnitPlatform()
}
}
project("meinian-bean"){
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.24'
}
}
project("meinian-dao"){
apply plugin: 'java-library'//支持api
dependencies {
api project(':meinian-bean')
implementation 'org.mybatis:mybatis-spring:1.2.3'
implementation 'com.alibaba:druid:1.0.15'
implementation 'org.mybatis:mybatis:3.3.0'
implementation 'mysql:mysql-connector-java:8.0.27'
}
}
project("meinian-service"){
apply plugin: 'java-library'//支持api
dependencies {
api project(':meinian-dao')
implementation 'org.springframework:spring-web:4.1.7.RELEASE'
implementation 'org.springframework:spring-test:4.0.5.RELEASE'
implementation 'org.springframework:spring-jdbc:4.1.7.RELEASE'
implementation 'org.aspectj:aspectjweaver:1.8.6'
}
}
project("meinian-web"){
apply plugin: 'war'
dependencies {
implementation project(':meinian-service')
implementation 'org.springframework:spring-webmvc:4.1.7.RELEASE'
implementation "com.fasterxml.jackson.core:jackson-databind:2.2.3"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.2.3"
implementation "com.fasterxml.jackson.core:jackson-core:2.2.3"
compileOnly 'javax.servlet:servlet-api:2.5'
implementation 'jstl:jstl:1.2'
}
}
project("meinian-mobile-web"){
apply plugin: 'war'
dependencies {
//implementation project(':meinian-bean')
implementation project(':meinian-service')
implementation 'org.springframework:spring-webmvc:4.1.7.RELEASE'
implementation "com.fasterxml.jackson.core:jackson-databind:2.2.3"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.2.3"
implementation "com.fasterxml.jackson.core:jackson-core:2.2.3"
compileOnly 'javax.servlet:servlet-api:2.5'
implementation 'jstl:jstl:1.2'
}
}
package cn.itbluebox.bean;
import java.io.Serializable;
public class Admin implements Serializable {
private Integer id;
private String username;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Admin{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
'}';
}
}
在数据集当中与之对应的内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itbluebox.mapper.AdminMapper">
<select id="getAdminList" resultType="cn.itbluebox.bean.Admin">
select id, username, email
from admin
</select>
</mapper>
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.userName=root
jdbc.password=root
import cn.itbluebox.bean.Admin;
import cn.itbluebox.mapper.AdminMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class AdminService {
@Autowired
private AdminMapper adminMapper;
@Transactional
public List<Admin> getAdminList(){
return adminMapper.getAdminList();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 1.加载properties文件 -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!-- 2.配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.userName}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="url" value="${jdbc.jdbcUrl}"></property>
<property name="driverClassName" value="${jdbc.driverClass}"></property>
</bean>
<!-- 0.配置扫描包 -->
<context:component-scan base-package="cn.itbluebox">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
<!-- 4.配置数据源事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<!-- 1.配置spring整合mybatis -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- 2.配置扫描mapper接口的bean对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itbluebox.mapper"/>
</bean>
</beans>
import cn.itbluebox.bean.Admin;
import cn.itbluebox.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
@RequestMapping("/list")
@ResponseBody
public List<Admin> getAdminList() {
System.out.println("dada");
return adminService.getAdminList();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1.配置扫描包 -->
<context:component-scan base-package="cn.itbluebox" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
<!-- 2.配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--3.处理静态资源文件 -->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<!-- 指定spring 配置文件的路径和名称 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 指定spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 2.配置springmvc的前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 2.处理POST请求乱码的过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 3.配置将POST请求转换为PUT或者DELETE请求的过滤器 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
启动成功
访问:http://localhost:8080/ssm/admin/list
4、微服务实战
4.1 创建数据库以及表
创建对应的数据库 : CREATE DATABASE micro_user
CREATE TABLE USER(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(30) NOT NULL COMMENT '用户名',
email VARCHAR(30) NOT NULL COMMENT '邮箱 ',
gender TINYINT DEFAULT 0 COMMENT '性别'
)
填入一些假数据
创建对应的数据库:CREATE DATABASE micro_order
USE micro_order;
CREATE TABLE `orderinfo` (
`oid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`uid` INT(11) DEFAULT NULL COMMENT '用户id',
`product_name` VARCHAR(30) NOT NULL COMMENT '省份',
PRIMARY KEY (`oid`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
填入一些假数据
4.2 搭建项目架构
microservice-parent
: 统一管理所有模块的 jar 包版本信息
microservice-bean
: 统一管理所有模块的用到的 pojo 类
microservice-common
:统一管理所有模块的用到的工具类、枚举类、异常处理、日志文件、统一返回结果信息
microservice-service
: 统一封装所有的微服务
microservice-gateway
: 封装网关信息
4.3 项目搭建
注意路径
注意路径
删除src目录
引入依赖
// 依赖版本管理
ext {
version = [
"fastjsonVersion" : "1.2.72",
"mybatisPlus" : "3.0.5",
"mysql" : "8.0.27",
"swaggerVersion": "2.7.0",
"jjwtVersion": "0.7.0"
]
dependencies = [
"fastjson" : "com.alibaba:fastjson:${version.fastjsonVersion}",
"mybatis-plus-boot-starter" : "com.baomidou:mybatis-plus-boot-starter:${version.mybatisPlus}",
"mysql" : "mysql:mysql-connector-java:${version.mysql}",
"swagger" : "io.springfox:springfox-swagger2:${version.swaggerVersion}",
"swaggerUI" : "io.springfox:springfox-swagger-ui:${version.swaggerVersion}",
"jjwt" : "io.jsonwebtoken:jjwt:${version.jjwtVersion}"
]
}
description 'cn.itbluebox gradle微服务实战父工程'
//构建Gradle脚本自身需要的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
buildscript {
ext {
springBootVersion = '2.2.1.RELEASE'
springCloudVersion = 'Hoxton.RELEASE'
springCloudAlibabaVersion = '0.2.2.RELEASE'
}
//设置仓库
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://repo.spring.io/milestone'}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
//配置全局, 包括root项目和子项目
allprojects {
group 'cn.itbluebox'
version '1.0-SNAPSHOT'
//配置编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
//设置仓库
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://repo.spring.io/milestone'}
}
}
apply from: 'version.gradle'
//配置所有子项目
subprojects {
apply plugin: 'java'
apply plugin: 'java-library' //api
apply plugin: 'io.spring.dependency-management'
sourceCompatibility= JavaVersion.VERSION_1_8
targetCompatibility= JavaVersion.VERSION_1_8
//公用的依赖
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
test {
useJUnitPlatform()
}
// dependencyManagement版本统一管理,类似于父maven的dependencyManagement
dependencyManagement {
dependencies {
for(depJar in rootProject.ext.dependencies){
dependency depJar.value
}
}
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.springframework.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
}
}
}
project(':microservice_bean'){
description("cn.itbluebox微服务实战之bean层:存放表对应的实体类")
}
project(":microservice_common"){
description("cn.itbluebox微服务实战之公共模块:存放微服务常用的工具类")
//依赖
dependencies {
api 'com.alibaba:fastjson'
api 'mysql:mysql-connector-java'
api 'com.baomidou:mybatis-plus-boot-starter'
api 'io.springfox:springfox-swagger2'
api 'io.springfox:springfox-swagger-ui'
api 'io.jsonwebtoken:jjwt'
api 'org.springframework.cloud:spring-cloud-starter-openfeign'
api 'org.springframework.cloud:spring-cloud-starter-alibaba-sentinel'
api 'org.springframework.cloud:spring-cloud-starter-alibaba-nacos-discovery'
}
}
project(":microservice_service"){
description("cn.itbluebox微服务实战之服务模块:存放各个微服务模块")
apply plugin: 'org.springframework.boot'
subprojects {
apply plugin : 'java-library'
apply plugin: 'org.springframework.boot'
dependencies {
api 'org.springframework.boot:spring-boot-starter-web'
api project(':microservice_bean')
api project(':microservice_common')
}
}
}
创建实体类
package cn.itbluebox.bean;
import java.io.Serializable;
/*====================================================
itbluebox
======================================================*/
public class OrderInfo {
private Integer oid;
private Integer uid;
private String productName;
public Integer getOid() {
return oid;
}
public void setOid(Integer oid) {
this.oid = oid;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
@Override
public String toString() {
return "OrderInfo{" +
"oid=" + oid +
", uid=" + uid +
", productName='" + productName + '\'' +
'}';
}
}
package cn.itbluebox.bean;
/*====================================================
itbluebox
======================================================*/
public class User {
private Integer id;
private String username;
private String email;
private boolean gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", gender=" + gender +
'}';
}
}
创建一些工具类(到源码获取)
server:
profiles:
active: dev
port: 7777
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/micro_user
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: service-user
详情请参考(源代码)
微服务案例代码下载:https://download.csdn.net/download/qq_44757034/86260450
server:
profiles:
active: dev
port: 7778
spring:
application:
name: service-order
datasource:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/micro_order
cloud:
nacos:
discovery:
server-addr: localhost:8848
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
详情请参考源代码
微服务案例代码下载:https://download.csdn.net/download/qq_44757034/86260450
4.5 项目运行
下载:https://github.com/alibaba/nacos/releases
startup.cmd -m standalone
启动成功
访问:http://localhost:8848/nacos/index.html
启动两个项目
启动成功
访问:http://localhost:7777/user/info/1
微服务案例代码下载:https://download.csdn.net/download/qq_44757034/86260450
Gradle文章目录 | |
---|---|
Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】 | |
Java之Gradle【IDEA版】入门到精通(下)(一篇文章精通系列)【创建 Springboot 项目+基于 ssm 多模块项目案例+微服务实战】 |