我有一个带有默认变量值的application.properties文件.我希望能够在运行时更改其中一个mvn spring-boot:run.我找到了如何更改整个文件,但我只想更改其中一个或两个属性.
首先,我需要说发送1.2.0.RELEASE的电子邮件工作正常
application.properties:
spring.mail.host = smtp.gmail.com
spring.mail.username = *****@gmail.com
spring.mail.password = ****
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.socketFactory.port = 465
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false
Run Code Online (Sandbox Code Playgroud)
pox.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.0.RELEASE</version>
<relativePath/>
</parent>
Run Code Online (Sandbox Code Playgroud)
.......
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
将父版本更改为1.2.5.RELEASE电子邮件发送无效
文档说: 如果spring.mail.host和相关库(由spring-boot-starter-mail定义)可用,则创建默认JavaMailSender(如果不存在).
所以我补充说
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它没有帮助,然后我已经取而代之
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我也试过了
spring.mail.host = smtp.gmail.com
spring.mail.username = *****@gmail.com
spring.mail.password = ****
spring.mail.port = 465
Run Code Online (Sandbox Code Playgroud)
结果一样.
手动创建和配置@Bean不是问题.但是我想要使用Spring Boot的所有美感.
请指出我的错误.
提前致谢
SnakeYaml jar 存在于 classPath:snakeyaml-1.26.jar
2330 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.NoSuchMethodError: org.yaml.snakeyaml.Yaml.<init>(Lorg/yaml/snakeyaml/constructor/BaseConstructor;Lorg/yaml/snakeyaml/representer/Representer;Lorg/yaml/snakeyaml/DumperOptions;Lorg/yaml/snakeyaml/LoaderOptions;Lorg/yaml/snakeyaml/resolver/Resolver;)V
at org.springframework.boot.env.OriginTrackedYamlLoader.createYaml(OriginTrackedYamlLoader.java:71)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:162)
at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:76)
at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadDocuments(ConfigFileApplicationListener.java:607)
Run Code Online (Sandbox Code Playgroud) 我有许多使用Spring Boot构建的微服务,所以为了一点乐趣,我想我会为他们添加HATEOAS以帮助建立跨资源链接.它似乎在一个特定的项目中工作得很好,但我想知道是否有一种很好的方式来链接API.举个例子,假设我有3个服务:
用户详细信息服务:代码:
/users/{userid}
Run Code Online (Sandbox Code Playgroud)
用户日历服务:代码:
/users/{userid}/appointments
/users/{userid}/appointments/{appointmentid}
Run Code Online (Sandbox Code Playgroud)
用户消息服务:代码:
/users/{userid}/messages
/users/{userid}/messages/{messageid}
Run Code Online (Sandbox Code Playgroud)
为了通过API实现这一点,最好是从用户资源到其约会和消息的链接.同样,从这些资源返回链接会很不错.当我有一个包含类路径上的所有内容的API时,这是非常可行的,我可以编写如下代码:
码:
user.add(linkTo(methodOn(CalendarController.class).appointments(user.getKey())).withRel("appointments"))
Run Code Online (Sandbox Code Playgroud)
但是,如果CalendarController不在我正在服务的服务的类路径上,我就无法做到这一点.
有没有一个好的/推荐的方法来创建不在当前项目中的控制器的链接?
从春季论坛引用
我正在尝试创建一个带弹簧启动的简单弹簧启动应用程序,它将"生成"消息发送到rabbitmq交换/队列以及另一个"消耗"这些消息的示例Spring启动应用程序.所以我有两个应用程序(或微服务,如果你愿意).1)"生产者"微服务2)"消费者"微服务
"生产者"有2个域对象.Foo和Bar应该转换为json并发送给rabbitmq."消费者"应该分别接收并将json消息转换为域Foo和Bar.出于某种原因,我不能完成这个简单的任务.关于这个的例子并不多.对于消息转换器我想使用org.springframework.messaging.converter.MappingJackson2MessageConverter
这是我到目前为止:
生产者MICROSERVICE
package demo.producer;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.stereotype.Service;
@SpringBootApplication
public class ProducerApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
@Bean
Queue queue() {
return new Queue("queue", false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("exchange");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("queue");
}
@Bean
public MappingJackson2MessageConverter jackson2Converter() {
MappingJackson2MessageConverter converter …Run Code Online (Sandbox Code Playgroud) 我使用Spring REST Docs来记录REST API.我正在尝试记录以下API操作:
GET /subsystems
GET /subsystems/some_name
Run Code Online (Sandbox Code Playgroud)
例如,调用GET /subsystems/samba返回以下JSON对象:
{
"id": "samba",
"description": "..."
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码片段来使用Spring REST Docs来记录此API操作:
this.mockMvc.perform(
get("/subsystems/samba").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andDo(
document("subsystem").withResponseFields(
fieldWithPath("id").description("Subsystem name"),
fieldWithPath("description").description("Subsystem description")));
Run Code Online (Sandbox Code Playgroud)
我的问题是第一个操作:调用GET /subsystems返回一个JSON数组:
[
{
"id" : "samba",
"description" : "..."
},
{ "id" : "ownCloud",
"description" : "..."
},
{ "id" : "ldap",
"description" : "..."
}
]
Run Code Online (Sandbox Code Playgroud)
我找不到任何显示如何在Spring REST Docs文档中记录此类结果的示例.我该怎么办?
我们最近将我们的应用程序与spring boot集成 我们的测试用例基于testng框架.我们的基础测试类如下所示
@SpringApplicationConfiguration(classes = Application.class)
@ActiveProfiles(profiles = "test")
@WebAppConfiguration
@IntegrationTest
public class BaseTestCase extends AbstractTestNGSpringContextTests {
}
Run Code Online (Sandbox Code Playgroud)
我们定义了上面的类来设置活动配置文件并加载应用程序上下文.所有集成测试类都扩展了BaseTestCase
我们的一个基本测试用例如下所示
@Test
public void testPing() throws Exception{
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(
<some url>,
String.class);
Assert.assertNotNull(response);
}
Run Code Online (Sandbox Code Playgroud)
当我们运行上面的测试用例时,我们得到以下异常
FAILED CONFIGURATION: @BeforeClass springTestContextPrepareTestInstance
java.lang.IllegalStateException: The WebApplicationContext for test context [DefaultTestContext@11b72c96 testClass = DataResourceTest, testInstance = com.xactly.insights.resource.imp.DataResourceTest@5b630a31, testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@10d034f0 testClass = DataResourceTest, locations = '{}', classes = '{class com.xactly.insights.app.Application}', contextInitializerClasses = '[]', …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置我的spring启动应用程序以使用h2控制台.我发现了一些文章,所有文章都使用webServlet.但我无法导入该类,尽管我的pom.xml中添加了h2依赖项.我收到此错误消息can not resolve the symbol WebServlet.我的进口线
import org.h2.server.web.WebServlet;
Run Code Online (Sandbox Code Playgroud)
下面是我的pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.2.6</version>
<scope>compile</scope>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId> …Run Code Online (Sandbox Code Playgroud) 我是Spring Boot试图学习的新手,现在我在使用Spring启动运行Spring Data Rest时遇到了问题.
我想用Spring Boot使用Spring Data REST构建一个应用程序.
我正面临这个问题
Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.teamtreehouse.core.Application.main(Application.java:10)
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:98)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:75)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:378)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:155)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardServer[-1]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Tomcat.start(Tomcat.java:342)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试 Spring Boot Actuator 并查看“/actuator/metrics/jvm.memory.max”端点。
我还使用以下 JVM 选项运行我的 Springboot 应用程序:
-Xmx104m
我创建了一个端点(“/memory”,它返回应用程序的 Total、Free、Used 和 Max memory。为此我使用了 Runtime.getRuntime().getXXX() 方法。
我的问题是 Springboot 的“jvm.memory.max”以字节为单位显示的值与 -Xmx 值以及“/memory”端点显示的值不匹配。
任何想法为什么这种不匹配?
spring-boot ×9
java ×5
spring ×4
json ×2
apache-spark ×1
email ×1
h2 ×1
hateoas ×1
heap-memory ×1
jakarta-mail ×1
jvm ×1
maven ×1
micrometer ×1
rabbitmq ×1
rest ×1
snakeyaml ×1
spring-amqp ×1
testng ×1