我有一个带有URL的H2数据库"jdbc:h2:test"
.我使用创建一个表CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64));
.然后我使用这个(空)表选择所有内容SELECT * FROM PERSON
.到现在为止还挺好.
但是,如果我将URL更改为"jdbc:h2:mem:test"
,唯一的区别是数据库现在只在内存中,这给了我一个org.h2.jdbc.JdbcSQLException: Table "PERSON" not found; SQL statement: SELECT * FROM PERSON [42102-154]
.我可能在这里遗漏了一些简单的东西,但任何帮助都会受到赞赏.
我有独立的应用程序。它在 java、spring-boot、postgres 上,并且有 liquibase。
我需要部署我的应用程序并且 liquibase 应该创建所有表等。但它应该在不公开的自定义模式中进行。liquibase 的所有服务表(databasechangelog 和 databasechangeloglock)也应该在自定义模式中。如何在 liquibase 开始工作之前在 DB 中创建我的模式?我必须在我的应用程序中在部署时、在配置中或类似内容中执行此操作。无需对数据库进行任何手动干预。
应用程序属性:
spring.datasource.jndi-name=java:/PostgresDS
spring.jpa.properties.hibernate.default_schema=my_schema
spring.jpa.show-sql = false
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.datasource.continue-on-error=true
spring.datasource.sql-script-encoding=UTF-8
liquibase.change-log = classpath:liquibase/changelog-master.yaml
liquibase.default-schema = my_schema
Run Code Online (Sandbox Code Playgroud)
更新:
当 liquibase 启动时,它会创建两张表 databasechangelogs 和一张表。之后,liquibase 开始工作。但是我想要 liquibase liquibase.default-schema = my_schema
,但是当 liquibase 开始工作时它不存在并且它是一个错误:异常是 liquibase.exception.LockException: liquibase.exception.DatabaseException: ERROR: schema "my_schema" does not exist
我希望 liquibase 在自定义架构中工作,而不是在公共场合:
liquibase.default-schema = my_schema
Run Code Online (Sandbox Code Playgroud)
但是在 liquibase 可以做到之前,必须创建模式。Liquibase 无法执行此操作,因为它尚未启动,并且启动时需要架构。恶性循环。
是否可以MongoDB
使用src/main/resources/data.sql
或通过任何其他文件在数据库中加载初始数据?
据我所知,data.sql
用于SQL
数据库的,而MongoDB
一个NOSQL
DB.但只是想知道是否有任何等同data.sql
于NOSQL
数据库的.
谷歌搜索时我发现了这个SO链接(Spring Boot - 正在加载初始数据),它正在寻找我正在寻找的东西,但它仍然不是一个独立的文件data.sql
.
我试过谷歌搜索,但几乎所有这类问题的解决方案是添加;DB_CLOSE_DELAY=-1
,但它并没有为我解决任何问题.
这是我的测试课
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Main.class})
public class Testas {
@Autowired
@Qualifier("managerImplementation")
private ClassifierManager manager;
@Test
public void testManager(){
ClassifierGroupEntity cge = new ClassifierGroupEntity();
manager.saveClassifierGroup(cge);
}
}
Run Code Online (Sandbox Code Playgroud)
经理班
@Service("managerImplementation")
public class ClassifierManagerImpl implements ClassifierManager{
@Autowired
private ClassifierGroupEntityRepository groupEntityRepository;
@Autowired
private ClassifierEntityRepository entityRepository;
@Autowired
private ClassifierValueEntityRepository valueEntityRepository;
@Override
public ClassifierGroupEntity getClassifierGroup(long id) {
return groupEntityRepository.findOne(id);
}
@Override
public ClassifierGroupEntity getClassifierGroup(String code) {
return groupEntityRepository.findByCode(code);
}
@Override
public ClassifierGroupEntity saveClassifierGroup(ClassifierGroupEntity entity) {
return groupEntityRepository.save(entity);
}
@Override
public void deleteClassifierGroup(long id) …
Run Code Online (Sandbox Code Playgroud) 我想在加载应用程序期间将一些数据加载到mysql数据库中.我正在使用Hibernate来管理应用程序的数据库.我可以通过使用Bootstrap在groovy中完成它,但我想用Java实现它.我想提一下,它是基于Spring MVC的Web应用程序.
在互联网上搜索时,我发现但是使用名为import_file的hibernate属性,我可以实现它,但我正在寻找替代路线.
我使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行JAR文件生成了一个Spring Boot Web应用程序.
使用的技术:
Spring Boot 1.4.2.RELEASE,Spring 4.3.4.RELEASE,Thymeleaf 2.1.5.RELEASE,Tomcat Embed 8.5.6,Maven 3,Java 8
这是我在启动数据库时调用的bean
@SpringBootApplication
@EnableAutoConfiguration
@Import({SecurityConfig.class})
public class BookApplication {
public static void main(String[] args) {
SpringApplication.run(BookApplication.class, args);
}
}
@Configuration
public class PersistenceConfig {
...
/**
* Creates an in-memory "books" database populated
* with test data for fast testing
*/
@Bean
public DataSource dataSource(){
return
(new EmbeddedDatabaseBuilder())
.addScript("classpath:db/H2.schema.sql")
.addScript("classpath:db/H2.data.sql")
.build();
}
Run Code Online (Sandbox Code Playgroud)
当我执行此插入时
CREATE TABLE IF NOT EXISTS t_time_lapse (
id bigint PRIMARY KEY,
name varchar(50) NOT …
Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的Spring Boot
应用程序,schema.sql
它分别data.sql
创建H2
DB
模式和导入数据。
我的schema
生成正常,H2 DB
但由于某种原因,数据没有导入。我看到0
表中的记录。
我也没有看到任何错误。
看起来像是配置问题。请指导。
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
应用程序属性
hibernate.jdbc.batch_size=500
hibernate.show_sql=true
hibernate.format_sql=true
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:tcp://localhost/~/h2-dbs/demo-db
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Run Code Online (Sandbox Code Playgroud)
src/main/resources/schema.sql
drop table env if exists;
create table env (
id int auto_increment primary key,
name varchar(250) not null default 'DEV',
category varchar(250) not null default …
Run Code Online (Sandbox Code Playgroud) JpaRepository
findAll()
方法返回空结果。我正在尝试通过使用Spring-boot,h2数据库和jpa来实现rest服务。
这是我的 schema.sql
CREATE TABLE IF NOT EXISTS `City` (
`city_id` bigint(20) NOT NULL auto_increment,
`city_name` varchar(200) NOT NULL,
PRIMARY KEY (`city_id`));
Run Code Online (Sandbox Code Playgroud)
我的data.sql
文件包括:
INSERT INTO City (city_id,city_name) VALUES(1,'EDE');
INSERT INTO City (city_id,city_name) VALUES(2,'DRUTEN');
INSERT INTO City (city_id,city_name) VALUES(3,'DELFT');
Run Code Online (Sandbox Code Playgroud)
该City
实体:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "City")
public class City {
@Id
@GeneratedValue
@Column(name = "city_id")
private Long cityId;
@Column(name = "city_name")
private String cityName;
public Long getCityId() …
Run Code Online (Sandbox Code Playgroud) 我有一个用户实体:
用户.java
@Entity
public class user {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
@NotBlank
private String firstname;
...
Run Code Online (Sandbox Code Playgroud)
当我第一次部署应用程序时,它会在我的数据库中创建这个表。
我的问题:有没有办法在创建表user
时创建一个带有名字的管理员用户和表?
java ×7
spring ×6
h2 ×5
spring-boot ×4
spring-mvc ×2
database ×1
hibernate ×1
jdbc ×1
liquibase ×1
mongodb ×1
mysql ×1
nosql ×1
postgresql ×1
spring-data ×1
sql ×1