我正在开发一个Spring Boot应用程序.我需要在启动时解析XML文件(countries.xml).问题是我不明白把它放到哪里以便我可以访问它.我的文件夹结构是
ProjectDirectory/src/main/java
ProjectDirectory/src/main/resources/countries.xml
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是将它放在src/main/resources中,但是当我尝试创建File(countries.xml)时,我得到一个NPE,堆栈跟踪显示我的文件在ProjectDirectory中查找(所以src/main/resources /没有添加).我尝试创建File(resources/countries.xml),路径看起来像ProjectDirectory/resources/countries.xml(所以再没有添加src/main).
我尝试添加这个没有结果
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
super.addResourceHandlers(registry);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以手动添加src/main /,但我想了解为什么它不能正常工作.我也尝试过使用ResourceLoader的示例 - 同样没有结果.
任何人都可以建议问题是什么?
更新: 仅供将来参考 - 在构建项目后,我遇到了访问文件的问题,因此我将File更改为InputStream
InputStream is = new ClassPathResource("countries.xml").getInputStream();
Run Code Online (Sandbox Code Playgroud) 我究竟做错了什么?我正在使用这个小的独立应用程序运行并找到我的src/main/resources/config/application.yml.相同的配置在JUnit中不起作用,见下文:
@Configuration
@ComponentScan
@EnableConfigurationProperties
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class);
}
}
@Component
@ConfigurationProperties
public class Bean{
...
}
Run Code Online (Sandbox Code Playgroud)
以下不起作用,application.yml未加载相同的属性并且Bean只有null值:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplication.class)
public class SomeTestClass {
...
}
Run Code Online (Sandbox Code Playgroud) 我在PCF中部署了springboot应用程序.我想根据环境变量记录消息.我应该怎么做才能在不重新启动应用程序的情况下运行时日志级别更改?
对于我的Spring-Boot应用程序,我通过@Configuration文件提供了RestTemplate,因此我可以添加合理的默认值(ex Timeouts).对于我的集成测试,我想模拟RestTemplate,因为我不想连接到外部服务 - 我知道期望的响应.我尝试在集成测试包中提供不同的实现,希望后者将覆盖实际的实现,但是反过来检查日志:真正的实现覆盖了测试.
如何确保TestConfig中的那个是使用的?
这是我的配置文件:
@Configuration
public class RestTemplateProvider {
private static final int DEFAULT_SERVICE_TIMEOUT = 5_000;
@Bean
public RestTemplate restTemplate(){
return new RestTemplate(buildClientConfigurationFactory());
}
private ClientHttpRequestFactory buildClientConfigurationFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(DEFAULT_SERVICE_TIMEOUT);
factory.setConnectTimeout(DEFAULT_SERVICE_TIMEOUT);
return factory;
}
}
Run Code Online (Sandbox Code Playgroud)
整合测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestConfiguration.class)
@WebAppConfiguration
@ActiveProfiles("it")
public abstract class IntegrationTest {}
Run Code Online (Sandbox Code Playgroud)
TestConfiguration类:
@Configuration
@Import({Application.class, MockRestTemplateConfiguration.class})
public class TestConfiguration {}
Run Code Online (Sandbox Code Playgroud)
最后是MockRestTemplateConfiguration
@Configuration
public class MockRestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
return Mockito.mock(RestTemplate.class)
}
}
Run Code Online (Sandbox Code Playgroud) 我已经将swagger插入我的春季启动应用程序.Spring启动允许您拥有每个环境的属性文件.有没有办法禁用生产环境的招摇?
当我使用Java 8方法引用双冒号operator(::)和new运算符(例如MyType::new)时,我在Spring of Spring Tool套件(STS)中遇到此错误:
无法解析org.eclipse.jdt.annotation.NonNull类型.它是从所需的.class文件间接引用的
如何摆脱这个错误?
我有以下课程:
ApplicationAndConfiguration类
package mypackage.service;
import mypackage.service.util.MyUtility;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class ApplicationAndConfiguration {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(ApplicationAndConfiguration.class, new String[]{});
}
@Bean(initMethod="init")
public MyUtility birtUtil() {
return new MyUtility();
}
}
Run Code Online (Sandbox Code Playgroud)
MyRestController类
package mypackage.service.controllers;
import mypackage.service.util.MyUtility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
@Autowired
private MyUtility util;
@RequestMapping("/getLibraryName")
public String getMessageFromRest(@RequestParam String name) {
return "name was " + name + "//" + …Run Code Online (Sandbox Code Playgroud) 你能不能帮助我了解spring-boot-starter-web VS spring-boot-starter-web-services VS spring-boot-starter-jersey之间的区别
文档说Starter用于使用JAX-RS和Jersey构建RESTful Web应用程序.spring-boot-starter-web的替代品
谢谢
我正在使用最新的Spring启动版本,我正在尝试设置应用程序,但我想禁用DataSource配置.我的配置类如下所示:
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class ApiApplicationConfig { }
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,我得到以下堆栈跟踪:
Caused by: org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:137)
at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:116)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 31 more
Run Code Online (Sandbox Code Playgroud)
我在配置中遗漏了什么来完全禁用数据源配置?我将手动设置一个DataSource,所以我不希望spring为我处理这个问题.
情况:
Spring Cloud同Spring Boot一个微服务,即微服务加载的是DB的配置信息来配置的连接.Swagger用于文档.这是代码:
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class, Swagger2MarkupTest.class}, loader = SpringApplicationContextLoader.class)
@ActiveProfiles("test")
public class Swagger2MarkupTest {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Autowired
protected Environment env;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build();
}
@Test
public void convertSwaggerToAsciiDoc() throws Exception {
this.mockMvc.perform(get("/v2/api-docs").accept(MediaType.APPLICATION_JSON))
.andDo(Swagger2MarkupResultHandler.outputDirectory("target/docs/asciidoc/generated")
.withExamples("target/docs/asciidoc/generated/exampless").build())
.andExpect(status().isOk());
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不加载数据库配置的情况下运行测试?这可能吗?
java ×10
spring ×9
spring-boot ×9
spring-test ×3
junit ×2
spring-web ×2
autowired ×1
eclipse ×1
java-8 ×1
logging ×1
pcf ×1
resources ×1
spring-ws ×1
swagger ×1
swagger-ui ×1
unit-testing ×1