【特别注意】
idea运行时,文件会在项目目录下,有file和log文件夹。打包时,会去掉依赖,因此运行时,需要指定环境变量。
启动.bat文件如下
java -classpath "D:/Users/windows/jdk17/springjars/*;web-root.jar" com.lkl.web.root.MyApp
@pause
由于后面pom.xml指定了依赖输出目录为 【D:\Users\windows\jdk17\springjars】 因此这里写同样的地址
1、创建项目,注意左侧模块的选择

创建项目
2、配置maven和maven仓库

maven设置
setting.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>liukunlin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>liukunlin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>lkl</id>
<mirrorOf>central</mirrorOf>
<name>The code storage of lkl</name>
<url>http://www.wxylkl.cn:880/content/repositories/public/</url>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>alimaven</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>maven2</id>
<mirrorOf>maven2</mirrorOf>
<name>maven2</name>
<url>https://repo1.maven.org/maven2/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
</settings>
3、打开项目的pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lkl.web</groupId>
<artifactId>luck</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>web-luck</name>
<description>web-luck</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version><!--$NO-MVN-MAN-VER$ -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<!-- 生成二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.3</version>
</dependency>
<!-- 拼音 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<!-- apk解析 -->
<dependency>
<groupId>org.apktool</groupId>
<artifactId>apktool</artifactId>
<version>2.11.1</version>
</dependency>
<!-- mysql连接数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.lkl.web</groupId>
<artifactId>base</artifactId>
<version>1.0.36-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>main</finalName>
<plugins>
<!-- 配置 Spring Boot 插件不打包依赖 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<!-- 配置 maven-jar-plugin 只打包应用代码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- <excludes>WEB-INF/lib/*.jar</excludes>-->
<!-- <outputDirectory>D:\\project\\ideaProjects</outputDirectory>-->
<outputDirectory>D:\Users\windows\springboot\\web-luck</outputDirectory>
</configuration>
</plugin>
<!-- 复制依赖到固定目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>D:\\Users\\windows\\jdk17\\springjars</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 如果idea会自动切换仓库去下载相关的依赖,就不用设置这个 -->
<repositories>
<repository>
<id>centra</id>
<url>http://www.wxylkl.cn:880/content/repositories/public</url>
</repository>
</repositories>
</project>
4、配置项目src/main/resources/application.properties文件
spring.web.resources.static-locations=file:${user.dir}/file/,classpath:/static/,classpath:/public/
spring.mvc.static-path-pattern=/file/**
spring.application.name=web-root
server.port=80
# once size:10MB
spring.servlet.multipart.max-file-size=1000MB
# once total size:100MB
spring.servlet.multipart.max-request-size=1500MB
# enable file upload
spring.servlet.multipart.enabled=true
#
spring.mvc.throw-exception-if-no-handler-found=true
#
server.error.whitelabel.enabled=false
#
server.error.path=/error
5、配置项目启动入口的类
import com.lkl.web.base.BaseApp;
import com.lkl.web.base.utils.Log;
import com.lkl.web.base.utils.MainExecutor;
import com.lkl.web.base.utils.MyDateBean;
import com.lkl.web.base.utils.listener.OnAppInitCall;
import jakarta.annotation.PreDestroy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.event.EventListener;
@SpringBootApplication
@ComponentScan(basePackages = {"com.lkl.web.luck", "com.lkl.web.base.api", "com.lkl.web.root.api.config"})
public class App {
public static void main(String[] args) {
BaseApp.init(SpringApplication.run(App.class, args), new OnAppInitCall() {
@Override
public void onBaseInitSuccess() {
MainExecutor.get().execute(() -> {
try {
Thread.sleep(3000);
MyServer.getInstance().start(BaseApp.name);
//0离线,1在线(0未知,1运动,2静止)
new PositionDao().resetDeviceState();
} catch (Exception e) {
Log.e(e);
}
});
}
@Override
public int configPort() {
return 0;
}
@Override
public void onSecondExecute(MyDateBean dateBean) {
//每秒回调
}
@Override
public void onDayStartExecute(MyDateBean dateBean) {
//每天0点0分0秒回调
}
@Override
public void onRequestUrlCall(jakarta.servlet.http.HttpServletRequest request) {
if ("OPTIONS".equals(request.getMethod())) {
//忽略OPTIONS方法,不做api记录
return;
}
}
});
}
@EventListener(ApplicationReadyEvent.class)
public void onApplicationReady() {
System.out.println("应用已就绪,可处理请求!");
BaseApp.onApplicationCreated();
}
@PreDestroy
public void onShutdown() {
System.out.println("应用正在关闭...");
// 执行资源释放逻辑
BaseApp.onApplicationDestroyed();
}
}
5、写一个根API(也叫控制器)
import com.lkl.web.base.BaseApp;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
public class RootApi {
@GetMapping("/")
public void root(HttpServletResponse response) throws IOException {
// 重定向到某个项目
response.sendRedirect(BaseApp.ip + ":81");
}
}
然后写一个测试控制器
@RestController
public class TestApi {
@GetMapping("/api/t1")
public String t1() {
return "接口测试成功--->" + System.currentTimeMillis();
}
@GetMapping("/api/t2")
public String t2() {
throw new MyException(400, "这里发生一些错误");
}
@POST("/api/t3")
public CallResult<Void> t3() {
return CallResult.ok("请求成功");
}
}