您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SpringBoot集成内存数据库HSQLDB的示例分析
## 一、HSQLDB简介
HSQLDB(HyperSQL Database)是一个轻量级的纯Java关系型数据库管理系统,具有以下核心特性:
1. **内存模式**:数据完全存储在内存中,重启后消失
2. **嵌入式模式**:作为应用的一部分运行,无需单独服务
3. **完全兼容SQL标准**:支持ACID事务、触发器、存储过程等
4. **微小体积**:核心jar包仅2MB左右
```xml
<!-- Maven依赖示例 -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.7.2</version>
<scope>runtime</scope>
</dependency>
在application.properties
中配置内存模式:
# 内存模式配置
spring.datasource.url=jdbc:hsqldb:mem:testdb
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
# 显示SQL日志
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
# 启动时执行初始化脚本
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
示例schema.sql
:
CREATE TABLE users (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50)
private String username;
@Column(unique = true, length = 100)
private String email;
// 省略getter/setter
}
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public User createUser(User user) {
return userRepository.save(user);
}
public List<User> findAll() {
return userRepository.findAll();
}
}
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testCreateAndFindUser() {
User user = new User();
user.setUsername("testuser");
user.setEmail("test@example.com");
User saved = userService.createUser(user);
assertNotNull(saved.getId());
List<User> users = userService.findAll();
assertEquals(1, users.size());
}
}
使用@DataJpaTest
进行切片测试:
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class UserRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserRepository userRepository;
@Test
public void whenFindByEmail_thenReturnUser() {
User user = new User("test", "test@test.com");
entityManager.persist(user);
entityManager.flush();
Optional<User> found = userRepository.findByEmail("test@test.com");
assertTrue(found.isPresent());
}
}
# 文件存储模式配置
spring.datasource.url=jdbc:hsqldb:file:/data/demo/db/testdb
@Bean(initMethod = "start", destroyMethod = "stop")
public Server hsqlServer() throws SQLException {
return Server.createTcpServer(
"-tcp", "-tcpAllowOthers", "-tcpPort", "9001");
}
# HikariCP连接池配置
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.connection-timeout=30000
@Transactional
CREATE INDEX idx_username ON users(username);
问题1:表不存在错误
解决:检查ddl-auto
配置,确保schema.sql
路径正确
问题2:连接泄漏
解决:使用try-with-resources
或确保关闭连接
try (Connection conn = dataSource.getConnection()) {
// 操作数据库
}
SpringBoot与HSQLDB的集成提供了极简的嵌入式数据库解决方案,具有以下优势:
完整示例代码可访问:GitHub示例仓库 “`
(注:实际文章约1600字,此处展示核心内容框架,完整实现需补充详细说明和扩展部分)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。