springboot2 中使用 H2数据库

本文详细介绍了如何配置H2数据库以进行单元测试,包括设置数据源URL、驱动类名、用户名、密码、JPA数据库、Hibernate DDL自动更新、显示SQL等参数,并提供了H2控制台的访问路径及端口。

最新在使用H2数据库进行单元测试,如果正常运行也想使用就做如下配置:

spring:
  datasource:
    url: jdbc:h2:~/test
    driver-class-name: org.h2.Driver
    username: sa
    password: 123456
    jpa:
      database: h2
      hibernate:
        ddl-auto: update
      show-sql: true
    h2:
      console:
        path: /h2-console
        enabled: true
server.port=8881
logging.level.org.hibernate=DEBUG

访问地址:http://localhost:8881/h2-console/login.do

<think> 我们正在回答用户的问题:如何在Spring Boot项目中集成JavaFX和H2数据库? 根据之前的对话历史和引用内容,我们可以总结如下步骤: 步骤1:创建Spring Boot项目并添加依赖 步骤2:配置H2数据库(通常使用内存模式) 步骤3:集成JavaFX(注意解决Spring容器与JavaFX的集成问题) 步骤4:解决依赖注入问题(因为JavaFX的控制器不是由Spring管理的,我们需要手动注入依赖) 另外,引用[3]提到了一个项目,该项目集成了JavaFX、Spring Boot、H2数据库,并且还实现了Jar包加密和数据库加密。我们可以参考其集成方式。 具体实现步骤: 1. 创建Spring Boot项目,选择合适的Spring Boot版本(如2.7.5)和Java版本(如17)。 2. 添加依赖:包括Spring Boot Web、H2、MyBatis(或MyBatis-Plus)以及JavaFX相关的依赖。 3. 配置H2数据库:在application.properties或application.yml中配置数据源、H2控制台等。 4. 创建JavaFX主类,并启动JavaFX应用。同时,需要将Spring Boot的上下文与JavaFX整合,以便在JavaFX中使用Spring管理的Bean。 5. 创建JavaFX的Controller,并通过某种方式(例如自定义的Spring上下文工具类)获取Spring Bean,实现依赖注入。 下面我们详细说明: 一、创建项目并添加依赖(以Maven为例) 在pom.xml中添加以下依赖: ```xml <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- H2 Database --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <!-- MyBatis Plus(或Spring Data JPA,根据项目选择) --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <!-- JavaFX --> <!-- 注意:根据你的Java版本,可能需要使用OpenJFX --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17.0.2</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>17.0.2</version> </dependency> ``` 二、配置H2数据库 在application.properties中: ```properties # 数据源配置 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password # H2控制台(方便调试) spring.h2.console.enabled=true spring.h2.console.path=/h2-console # 初始化数据库(如果需要) spring.sql.init.mode=always spring.sql.init.schema-locations=classpath:schema.sql spring.sql.init.data-locations=classpath:data.sql ``` 三、集成JavaFX和Spring Boot 由于Spring Boot的启动类(带有@SpringBootApplication)和JavaFX的Application类是两个不同的入口,我们需要将它们整合起来。 我们可以创建一个JavaFX应用类,并在这个类中启动Spring Boot上下文。 示例代码: ```java @SpringBootApplication public class MyJavaFxApplication extends Application { private ConfigurableApplicationContext springContext; @Override public void init() { // 在初始化方法中启动Spring Boot上下文 springContext = new SpringApplicationBuilder(MyJavaFxApplication.class) .run(getParameters().getRaw().toArray(new String[0])); } @Override public void start(Stage primaryStage) throws Exception { // 获取Spring上下文中的Bean,例如FXMLLoader FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setControllerFactory(springContext::getBean); // 重要:设置ControllerFactory,这样创建的Controller就可以由Spring管理 // 加载FXML文件 // 注意:这里假设你的FXML文件在src/main/resources下,例如main.fxml Parent root = fxmlLoader.load(getClass().getResourceAsStream("/main.fxml")); Scene scene = new Scene(root, 800, 600); primaryStage.setScene(scene); primaryStage.show(); } @Override public void stop() { springContext.stop(); } public static void main(String[] args) { launch(args); } } ``` 四、创建Controller并注入Spring Bean 在Controller中,我们可以使用Spring的依赖注入。因为我们在FXMLLoader中设置了ControllerFactory为springContext::getBean,所以Controller会被Spring创建并管理。 例如,我们有一个MainController: ```java @Controller public class MainController { @Autowired private UserService userService; // 假设我们有一个UserService public void initialize() { // 在FXML加载后初始化 // 这里我们可以使用userService } } ``` 在FXML文件中,我们需要指定Controller: ```fxml <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.VBox?> <VBox xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.demo.MainController"> <!-- 控件省略 --> </VBox> ``` 这样,在MainController中就可以使用Spring注入的Bean了。 五、运行项目 运行MyJavaFxApplication的main方法即可。 注意事项: 1. 由于JavaFX有自己的线程模型,Spring Boot的启动和关闭需要在JavaFX的生命周期方法中处理(init和stop)。 2. 在Spring Boot 3中,启动方式可能有所不同,请根据具体版本调整。 通过以上步骤,我们实现了Spring Boot集成JavaFX和H2数据库。 如果用户需要更高级的功能(如Jar包加密、H2数据库加密等),可以参考引用[3]中的项目,它使用了JVMTI技术和DLL项目工程来实现Jar包加密,以及对H2数据库的加密。 最后,我们生成相关问题: </think> ### Spring Boot项目集成JavaFX和H2数据库的实现方法 #### 一、核心实现步骤 1. **项目初始化** ```xml <!-- pom.xml 关键依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> ``` 建议使用Spring Boot 2.7+ 和 JDK 17(兼容JavaFX模块化系统)[^3]。 2. **JavaFX与Spring Boot整合** ```java @SpringBootApplication public class JavaFxApplication extends Application { private static ConfigurableApplicationContext context; @Override public void init() { context = new SpringApplicationBuilder(JavaFxApplication.class) .run(getParameters().getRaw().toArray(new String[0])); } @Override public void start(Stage stage) throws Exception { FXMLLoader loader = new FXMLLoader(); loader.setControllerFactory(context::getBean); // 关键:启用Spring依赖注入 Parent root = loader.load(getClass().getResourceAsStream("/main.fxml")); stage.setScene(new Scene(root)); stage.show(); } @Override public void stop() { context.close(); } } ``` 通过`ConfigurableApplicationContext`桥接Spring容器与JavaFX生命周期[^3]。 3. **H2数据库配置** ```properties # application.properties spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.h2.console.enabled=true spring.sql.init.mode=always spring.sql.init.schema-locations=classpath:schema.sql ``` 4. **控制器依赖注入** ```java @Controller public class MainController { @Autowired private UserRepository userRepo; // Spring管理的Bean @FXML private void handleSubmit(ActionEvent event) { userRepo.save(new User("John")); // 操作H2数据库 } } ``` 通过`loader.setControllerFactory(context::getBean)`解决JavaFX控制器依赖注入问题[^3]。 #### 二、高级功能实现 1. **H2数据库加密** ```java @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .setName("encrypted;AES=secret_key") // 启用AES加密 .build(); } ``` 使用`:AES=your_key`后缀启用数据库加密[^1]。 2. **内存数据库初始化** ```sql -- src/main/resources/schema.sql CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ); ``` #### 三、项目结构示例 ``` src/ ├── main/ │ ├── java/ │ │ ├── com/example/ │ │ │ ├── MainApplication.java # SpringBoot入口 │ │ │ ├── controller/ │ │ │ │ └── MainController.java # JavaFX控制器 │ │ │ ├── repository/ │ │ │ │ └── UserRepository.java # Spring Data JPA接口 │ ├── resources/ │ │ ├── main.fxml # JavaFX界面 │ │ ├── application.properties │ │ ├── schema.sql # H2初始化脚本 ``` #### 四、运行验证 1. 启动应用后访问 `http://localhost:8080/h2-console` 进入H2管理界面 2. 使用JDBC URL: `jdbc:h2:mem:testdb` 3. JavaFX界面将自动加载并与Spring Bean交互 > **注意**:JavaFX线程模型与Spring不同,需通过`Platform.runLater()`处理UI更新[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值