小编lub*_*nac的帖子

Spring Boot访问静态资源缺少scr/main/resources

我正在开发一个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)

java resources spring spring-boot spring-properties

56
推荐指数
4
解决办法
10万
查看次数

'application.yml'中的Spring Boot属性未从JUnit Test加载

我究竟做错了什么?我正在使用这个小的独立应用程序运行并找到我的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)

java junit spring spring-test spring-boot

35
推荐指数
7
解决办法
6万
查看次数

如何在不重新启动Spring启动应用程序的情况下更改运行时的日志级别

我在PCF中部署了springboot应用程序.我想根据环境变量记录消息.我应该怎么做才能在不重新启动应用程序的情况下运行时日志级别更改?

java logging spring pcf spring-boot

35
推荐指数
7
解决办法
4万
查看次数

在Integration测试中覆盖bean

对于我的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)

java spring spring-test spring-boot spring-web

33
推荐指数
7
解决办法
4万
查看次数

你如何在生产中关闭swagger-ui

我已经将swagger插入我的春季启动应用程序.Spring启动允许您拥有每个环境的属性文件.有没有办法禁用生产环境的招摇?

java spring swagger swagger-ui spring-boot

31
推荐指数
4
解决办法
3万
查看次数

无法解析org.eclipse.jdt.annotation.NonNull类型.它是从所需的.class文件间接引用的

当我使用Java 8方法引用双冒号operator(::)和new运算符(例如MyType::new)时,我在Spring of Spring Tool套件(STS)中遇到此错误:

无法解析org.eclipse.jdt.annotation.NonNull类型.它是从所需的.class文件间接引用的

如何摆脱这个错误?

java eclipse java-8 spring-tool-suite method-reference

24
推荐指数
3
解决办法
6041
查看次数

Springboot单元测试Autowired

我有以下课程:

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)

java spring unit-testing autowired spring-boot

24
推荐指数
2
解决办法
5万
查看次数

spring-boot-starter-web和spring-boot-starter-web-services以及spring-boot-starter-jersey之间的区别

你能不能帮助我了解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的替代品

谢谢

java spring spring-ws spring-boot spring-web

17
推荐指数
1
解决办法
7392
查看次数

Spring Boot - 启用EnableAutoConfiguration,排除不起作用

我正在使用最新的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为我处理这个问题.

java spring spring-boot

14
推荐指数
2
解决办法
3万
查看次数

如何在Spring Boot中模拟数据库连接以进行测试?

情况:

  1. 我使用Spring CloudSpring Boot一个微服务,即微服务加载的是DB的配置信息来配置的连接.
  2. 我创建了一个测试来获取其余的接口Swagger用于文档.
  3. 我想禁用数据库配置的加载,因为没有必要.

这是代码:

@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 junit spring spring-test spring-boot

14
推荐指数
1
解决办法
2万
查看次数