springboot开发PC端桌面应用

 一、需求描述:

1、要求桌面能在window、Linux和macos系统上运行

2、用户自定义数据筛选策略,策略可通过excel导入导出

3、选择多个excel文件通过策略过滤生成新的excel

二、技术选型及集成环境配置:

1、PC端跨平台直接选用javafx来作为桌面开发

2、动态数据规则使用drools以及内存数据库H2

3、excel操作选择阿里的easyexcel

4、基础环境:win10专业版、idea2023.1.3、springboot3.0.8、jdk17

三、基础环境搭建

1、下载jdk17下载地址:Java Downloads | Oracle

2、javafx-sdk和jmode(打exe程序的时候用)下载地址:JavaFX - Gluon

springboot开发PC端桌面应用_第1张图片

 

3、将jar打包成其他系统可执行文件的工具(wix311)下载 安装:Release WiX Toolset v3.11.2 · wixtoolset/wix3 · GitHub

4、环境变量参考:

springboot开发PC端桌面应用_第2张图片

 

四、开发项目配置:

1、新建springboot项目

2、pom文件参考



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        3.0.8
         
    
    com.stats.excel
    stats-excel
    0.0.1-SNAPSHOT
    stats-excel
    stats-excel
    
        8
    
    
        
            org.springframework.boot
            spring-boot-starter

        

        
            com.h2database
            h2
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
        
            org.openjfx
            javafx-controls
            17
        
        
            org.openjfx
            javafx-fxml
            17
        
        





        
        
            com.alibaba
            easyexcel
            3.3.2
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.3.1
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.13.5
        
        
        
            org.drools
            drools-core
            7.61.0.Final
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


3、application启动文件参考

package com.stats.excel.statsexcel;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import java.net.URL;

@SpringBootApplication
public class StatsExcelApplication extends Application {

    // 任何地方都可以通过这个applicationContext获取springboot的上下文
    public static ConfigurableApplicationContext applicationContext;
    private static String[] args;

    @Override
    public void start(Stage primaryStage) throws Exception {
        URL resource = getClass().getResource("/fxml/login.fxml");
        if (resource == null) {
            throw new Exception();
        }
        // 加载 fxml 下面的逻辑可以单独封装
        FXMLLoader loader = new FXMLLoader(resource);
        loader.setControllerFactory(new Callback, Object>() {
            @Override
            public Object call(Class param) {
                // 控制器工厂提供bean注入,此处的缺点是不能根据bean名字注入,只能通过class类型注入bean
                // 解决方案:
                // 1、SpringbootJavafxDemoApplication.applicationContext.getBean("Bean Name", Bean.class);
                // 2、@Autowired private ApplicationContext applicationContext;
                // Object bean_name = applicationContext.getBean("bean Name", Bean.class);
                return applicationContext.getBean(param);
            }
        });
        // 加载
        VBox root = loader.load();

        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }


    public static void main(String[] args) {
        StatsExcelApplication.args = args;
        launch(args);
    }

    @Override
    public void init() throws Exception {
        // 启动springboot
        applicationContext = SpringApplication.run(StatsExcelApplication.class, args);
    }

    @Override
    public void stop() throws Exception {
        // 关闭springboot
        applicationContext.stop();
    }

}

4、其他service层、controller层以及数据库配置请参考项目:非生物语言学家 / DesktopAPP桌面应用开发 · GitCode

5、启动类配置:

5.1、新增javafx-sdk启动参数配置

--module-path
"D:\java\install\openjfx-17.0.7_windows-x64_bin-sdk\javafx-sdk-17.0.7\lib"
--add-modules
javafx.controls,javafx.fxml

springboot开发PC端桌面应用_第3张图片

5.2、 Artifacts依赖(javafx-sdk-17.0.7\bin下的所有文件)导入:

springboot开发PC端桌面应用_第4张图片

 6、jar转win可执行exe文件命令参考:

jpackage --type exe --input . --dest . --main-jar .\[你打的jar包] --main-class [你工程的包名.启动类]p --module-path "[你的javafx-jmods路径]" --add-modules javafx.controls,javafx.fxml --win-shortcut --win-menu

五、效果展示略

你可能感兴趣的:(spring,boot,后端,java)