如何用Spring-MVC、Spring-Data和PostgreSQL创建Java可执行exe与内嵌PostgreSQL的JAR
内嵌PostgreSQL的Spring应用打包及exe制作步骤
一、集成内嵌PostgreSQL到Spring-MVC项目
原来的Jar包无法运行的核心原因是依赖外部PostgreSQL服务,需要将PostgreSQL嵌入到应用中,随应用启动自动运行:
- 引入内嵌PostgreSQL依赖,在pom.xml中添加如下配置:
<dependency> <groupId>io.zonky.test</groupId> <artifactId>embedded-postgresql</artifactId> <version>2.0.7</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.5.4</version> </dependency>
- 配置内嵌PostgreSQL及数据源参数,在application.properties中添加:
# 内嵌PostgreSQL配置 embedded.postgresql.port=5433 embedded.postgresql.database-name=app_db embedded.postgresql.username=app_user embedded.postgresql.password=app123 # 配置数据持久化路径,重启应用数据不丢失 embedded.postgresql.data-directory=./pg_data # Spring数据源配置(对接内嵌PostgreSQL) spring.datasource.url=jdbc:postgresql://localhost:5433/app_db spring.datasource.username=app_user spring.datasource.password=app123 spring.datasource.driver-class-name=org.postgresql.Driver # Spring-Data JPA配置(使用JPA时添加) spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
- 添加强制启动优先级配置,确保内嵌PostgreSQL先于数据源初始化,新建配置类:
@Configuration @Order(Ordered.HIGHEST_PRECEDENCE) public class EmbeddedPostgresConfig { // 依赖会自动读取前缀为embedded.postgresql的配置,自动启动PG实例 }
二、打包为可执行Jar包
推荐使用Spring Boot打包插件,无需修改原有Spring-MVC业务代码:
- 配置pom.xml打包插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.18</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <!-- 替换为你项目的Spring Boot启动类全路径 --> <mainClass>com.xxx.MyApplication</mainClass> </configuration> </plugin> </plugins> </build>
- 执行打包命令:
mvn clean package,打包完成后target目录下生成的xxx.jar就是可执行Jar,可先执行java -jar xxx.jar测试是否正常启动、数据库功能是否正常。
三、制作Windows可执行exe文件
提供两种通用方案,可根据JDK版本选择:
方案1:使用JDK自带jpackage工具(JDK14及以上版本推荐)
无需额外安装第三方工具,执行如下命令即可生成exe:
jpackage --type exe --input ./target --main-jar 你的jar包文件名.jar --main-class org.springframework.boot.loader.JarLauncher --name 应用名称 --app-version 1.0.0 --icon ./应用图标.ico --win-shortcut --win-menu
参数说明:
--win-shortcut:安装后生成桌面快捷方式--win-menu:添加到Windows开始菜单- 如需查看运行日志,可添加
--win-console参数启动时弹出控制台窗口
方案2:使用Launch4j工具(支持JDK8及以上版本)
- 打开Launch4j工具,配置输出exe文件路径
- 选择上一步打包好的可执行Jar文件
- 配置最小支持JRE版本,比如1.8.0
- 可按需配置JVM启动参数、exe图标、程序名称等信息
- 点击构建即可生成exe文件,可将JRE和exe放在同一目录分发给用户,无需用户提前安装JDK
注意事项
- 内嵌PostgreSQL的data目录建议配置为相对路径,数据会保存在exe同级目录下,不会随程序卸载丢失
- 分发exe时建议将对应版本的JRE一起打包,避免用户环境JDK版本不兼容导致运行失败
- 如果不需要用户可见数据库内容,可将pg_data目录设置为隐藏属性
内容的提问来源于stack exchange,提问作者3Tipo Qudrado
相关产品推荐
相关产品推荐

