723. 2024-06-13 09:00 采纳率: 25%
浏览 240

Springboot打包jar运行找不到数据库,请求不到数据该怎么办?

Springboot在IDEA运行没有问题,但是打包jar后在本地终端java -jar就无法访问数据库请求数据了
这是我的applocation.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://47.93.153.170:3306/ren?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
    username: ren
    password: 123456789
  web:
    resources:
      static-locations: classpath:/templates/, classpath:/static/

我的application.properyies

spring.application.name=demo

打包在本地java -jar 报错:提示MyBatis映射器未找到和Spring Data JPA仓库未找到

2024-06-14 17:06:50.588  INFO 29408 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2024-06-14 17:06:51.246  WARN 29408 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.
2024-06-14 17:06:51.336  INFO 29408 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-06-14 17:06:51.358  INFO 29408 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 7 ms. Found 0 JPA repository interfaces.
2024-06-14 17:06:51.491  WARN 29408 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.

我的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>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
            <version>2.7.18</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.30</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.7.18</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.18</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.0</version>
            </plugin>
        </plugins>
    </build>
    <packaging>jar</packaging>
</project>

我IDEA上无论连的自己本地库还是云服务宝塔上面的公网都可以,就是内网不行,但是应该接公网就可以吧?我该怎么解决?

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-06-13 09:00
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    遇到Spring Boot打包成jar后无法访问数据库的问题,通常可能由以下几个原因造成:

    1. 环境差异:IDEA运行时使用的是开发环境配置,而打包成jar后可能使用的是生产环境配置,两者可能存在差异。
    2. 配置文件未加载:打包成jar后,可能没有正确加载application.ymlapplication.properties文件。
    3. 数据库连接问题:数据库连接字符串、用户名、密码等配置可能存在问题,或者数据库服务器的防火墙设置不允许从jar运行的机器访问。
    4. 端口问题:如果数据库服务器在公网IP上,可能需要确保jar运行的机器可以访问该公网IP和端口。

    下面是一些可能的解决方案:

    检查配置文件加载

    确保application.ymlapplication.properties文件位于jar包的src/main/resources目录下,这样Spring Boot在启动时才能正确加载配置。

    检查数据库连接信息

    • 确保数据库的URL、用户名和密码是正确的。
    • 检查数据库服务器是否允许从jar运行的机器IP地址访问。

    检查端口和防火墙设置

    • 确保数据库服务器的端口(默认MySQL是3306)没有被防火墙阻止。
    • 如果是在云服务器上,检查安全组或网络安全策略是否允许访问。

    使用绝对路径指定配置文件

    在运行jar时,可以使用--spring.config.location参数指定配置文件的绝对路径,例如:

    java -jar -Dspring.config.location=file:/path/to/application.yml your-app.jar
    

    检查内网和公网访问权限

    • 如果可以访问公网数据库但无法访问内网数据库,可能是内网的网络安全设置问题。检查内网的路由器或防火墙设置。
    • 确保jar运行的机器和内网数据库服务器在同一个网络段,并且网络是通的。

    代码实现

    如果你需要在代码中动态设置数据库连接信息,可以在Spring Boot的配置类中使用@Value注解注入配置属性,例如:

    @Configuration
    public class DatabaseConfig {
    
        @Value("${spring.datasource.url}")
        private String dbUrl;
    
        @Value("${spring.datasource.username}")
        private String dbUser;
    
        @Value("${spring.datasource.password}")
        private String dbPassword;
    
        // 其他数据库配置代码...
    }
    

    参考资料

    如果上述方法都不能解决问题,建议检查Spring Boot的日志输出,看看是否有更详细的错误信息,这有助于进一步诊断问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 6月14日
  • 创建了问题 6月13日