在Spring Boot项目中,我试图从我的IDE中查看内存中的表。
如何从Intellij IDEA访问内存中的h2数据库。
这是我的application.yml中的片段:
h2:
datasource:
url: jdbc:h2:mem:mydb
username: username
password: 123
driver-class-name: org.h2.Driver
init-sql: h2.sql
console:
enabled: true
path: /search/console
settings:
trace: false
web-allow-others: false
Run Code Online (Sandbox Code Playgroud)
Intellij没有字段可输入内存数据库的用户名:
测试连接显示成功,但是看不到h2.sql中的表。我可以使用h2控制台访问它们。
在我的 Spring Boot 项目中,我有两个数据源:
@Primary
@Bean(name = "pgDatasource")
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("spring.datasource.dbcp2.driver-class-name"));
dataSource.setUrl(env.getProperty("spring.datasource.dbcp2.url"));
dataSource.setUsername(env.getProperty("spring.datasource.dbcp2.username"));
dataSource.setPassword(env.getProperty("spring.datasource.dbcp2.password"));
dataSource.setMaxActive(Integer.valueOf(env.getProperty("spring.datasource.dbcp2.max-total")));
dataSource.setMaxIdle(Integer.valueOf(env.getProperty("spring.datasource.dbcp2.max-idle")));
dataSource.setInitialSize(Integer.valueOf(env.getProperty("spring.datasource.dbcp2.initial-size")));
return dataSource;
}
@Bean(name = "h2Datasource")
public BasicDataSource h2DataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("spring.h2.datasource.driver-class-name"));
dataSource.setUrl(env.getProperty("spring.h2.datasource.url"));
dataSource.setUsername(env.getProperty("spring.h2.datasource.username"));
dataSource.setPassword(env.getProperty("spring.h2.datasource.password"));
Resource initData = new ClassPathResource("scripts/inmem.sql");
DatabasePopulator databasePopulator = new ResourceDatabasePopulator(initData);
DatabasePopulatorUtils.execute(databasePopulator, dataSource);
return dataSource;
}
Run Code Online (Sandbox Code Playgroud)
这里 PostgreSQL 的数据源是一个主要的 bean。在我的几个测试中,我想针对 h2 数据库运行一个脚本。为此,我正在尝试使用@Sql注释。但是,如果我使用@Sql,它会针对pgDatasource. 我可以将 h2 配置为这些测试的主 bean,但测试方法的主体取决于pgDatasource主 bean所在的配置。
测试样品 …
在我的Spring Boot项目中,我试图授予具有特定IP地址的多个管理员用户访问权限。
是否可以将一个角色映射到多个IP地址?
这是我的安全配置中的无效代码。(为简单起见,我提供了硬编码的角色名称和IP地址)
@SuppressWarnings("ALL")
@Configuration
@EnableWebSecurity
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
List<String> ipAddresses = new ArrayList<>();
ipAddresses.add("127.0.0.1");
ipAddresses.add("192.168.1.0/24");
ipAddresses.add("0:0:0:0:0:0:0:1");
for (String ip : ipAddresses) {
http.authorizeRequests().
antMatchers("/admin" + "/**")
.access("hasRole('admin') and hasIpAddress('" + ip + "')");
}
}
//some other configurations
}
Run Code Online (Sandbox Code Playgroud)
在我的 Spring boot 项目的测试中,我无法在嵌套类中执行 SQL 脚本。
代码
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = SecurityTestConfig.class)
@AutoConfigureMockMvc
@ActiveProfiles({"test", "test-security-profile"})
@TestInstance(Lifecycle.PER_CLASS)
class MyTest{
//...
@Test
@Sql("/permission.sql")
void temp() {//here script is executed well}
@Nested
@DisplayName("Inner test")
class InnerTest {
@Test
@Sql("/permission.sql")
void temp() {//here @Sql throws exception}
}
}
Run Code Online (Sandbox Code Playgroud)
异常(运行测试时抛出)
java.lang.IllegalStateException: Failed to execute SQL scripts for test context [DefaultTestContext@406ad6d5 testClass = MyTest.InnerTest, testInstance = uz.oltinolma.producer.security.mvc.permission.MyTest$InnerTest@2a7bc16b, testMethod = temp@MyTest.InnerTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@1186374c testClass = MyTest.InnerTest, locations = '{}', classes = '{}', contextInitializerClasses …Run Code Online (Sandbox Code Playgroud) 在我的Spring Boot ( 2.0.5 ) 项目中,我使用的是Elasticsearch ( 5.6.9 )。但是,由于测试环境中的一些错误,我们正在迁移到 Spring boot( 2.1.0 )。当我运行应用程序时,出现以下消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call the method org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.execute()Lorg/elasticsearch/action/ActionFuture; but it does not exist. Its class, org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder, is available from the following locations:
jar:file:/C:/Users/User/.m2/repository/org/elasticsearch/elasticsearch/5.6.9/elasticsearch-5.6.9.jar!/org/elasticsearch/action/admin/indices/mapping/put/PutMappingRequestBuilder.class
It was loaded from the following location:
file:/C:/Users/User/.m2/repository/org/elasticsearch/elasticsearch/5.6.9/elasticsearch-5.6.9.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder
Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)
当前 pom.xml 文件 …
目前我正在尝试Save用message_en.properties文件中的值替换按钮标签中的单词。
<input type="submit" value="Save" class="btn btn-primary btn-block"/>
Run Code Online (Sandbox Code Playgroud)
我试过如下:
<input type="submit" th:text="#{newuser.page.saveBtn}" class="btn btn-primary btn-block"/>
Run Code Online (Sandbox Code Playgroud)
但它没有给出我预期的结果。请帮我解决这个问题。