Idea新建Springboot项目

【特别注意】

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("请求成功");
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容