parent
31d7ebc96e
commit
8ec00c35bf
|
|
@ -60,7 +60,7 @@ added after the original pull request but before a merge.
|
||||||
If you don't have an IDE preference we would recommend that you use
|
If you don't have an IDE preference we would recommend that you use
|
||||||
http://www.springsource.com/developer/sts[Spring Tools Suite] or
|
http://www.springsource.com/developer/sts[Spring Tools Suite] or
|
||||||
http://eclipse.org[Eclipse] when working with the code. We use the
|
http://eclipse.org[Eclipse] when working with the code. We use the
|
||||||
http://eclipse.org/m2e/[m2eclipe] eclipse plugin for maven support. Other IDEs and tools
|
http://eclipse.org/m2e/[M2Eclipse] eclipse plugin for maven support. Other IDEs and tools
|
||||||
should also work without issue.
|
should also work without issue.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -168,7 +168,7 @@ easier to navigate.
|
||||||
|
|
||||||
==== Manual installation with m2eclipse
|
==== Manual installation with m2eclipse
|
||||||
If you prefer to install Eclipse yourself we recommend that you use the
|
If you prefer to install Eclipse yourself we recommend that you use the
|
||||||
http://eclipse.org/m2e/[m2eclipe] eclipse plugin. If you don't already have m2eclipse
|
http://eclipse.org/m2e/[M2Eclipse] eclipse plugin. If you don't already have m2eclipse
|
||||||
installed it is available from the "Eclipse marketplace".
|
installed it is available from the "Eclipse marketplace".
|
||||||
|
|
||||||
Spring Boot includes project specific source formatting settings, in order to have these
|
Spring Boot includes project specific source formatting settings, in order to have these
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ Having trouble with Spring Boot? We'd like to help!
|
||||||
|
|
||||||
== Reporting Issues
|
== Reporting Issues
|
||||||
Spring Boot uses GitHub's integrated issue tracking system to record bugs and feature
|
Spring Boot uses GitHub's integrated issue tracking system to record bugs and feature
|
||||||
requests. If you want to raise an issue, please follow the recommendations bellow:
|
requests. If you want to raise an issue, please follow the recommendations below:
|
||||||
|
|
||||||
* Before you log a bug, please https://github.com/spring-projects/spring-boot/search?type=Issues[search the issue tracker]
|
* Before you log a bug, please https://github.com/spring-projects/spring-boot/search?type=Issues[search the issue tracker]
|
||||||
to see if someone has already reported the problem.
|
to see if someone has already reported the problem.
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,9 @@ public class Log4J2RestartListener implements RestartListener {
|
||||||
"hooks");
|
"hooks");
|
||||||
ReflectionUtils.makeAccessible(hooksField);
|
ReflectionUtils.makeAccessible(hooksField);
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Collection<Cancellable> state = (Collection<Cancellable>) ReflectionUtils
|
Collection<Cancellable> hooks = (Collection<Cancellable>) ReflectionUtils
|
||||||
.getField(hooksField, shutdownCallbackRegistry);
|
.getField(hooksField, shutdownCallbackRegistry);
|
||||||
state.clear();
|
hooks.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ public class LocalDevToolsAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void liveReloadTriggerdOnClassPathChangeWithoutRestart() throws Exception {
|
public void liveReloadTriggeredOnClassPathChangeWithoutRestart() throws Exception {
|
||||||
this.context = initializeAndRun(ConfigWithMockLiveReload.class);
|
this.context = initializeAndRun(ConfigWithMockLiveReload.class);
|
||||||
LiveReloadServer server = this.context.getBean(LiveReloadServer.class);
|
LiveReloadServer server = this.context.getBean(LiveReloadServer.class);
|
||||||
reset(server);
|
reset(server);
|
||||||
|
|
@ -150,7 +150,7 @@ public class LocalDevToolsAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void liveReloadNotTriggerdOnClassPathChangeWithRestart() throws Exception {
|
public void liveReloadNotTriggeredOnClassPathChangeWithRestart() throws Exception {
|
||||||
this.context = initializeAndRun(ConfigWithMockLiveReload.class);
|
this.context = initializeAndRun(ConfigWithMockLiveReload.class);
|
||||||
LiveReloadServer server = this.context.getBean(LiveReloadServer.class);
|
LiveReloadServer server = this.context.getBean(LiveReloadServer.class);
|
||||||
reset(server);
|
reset(server);
|
||||||
|
|
|
||||||
|
|
@ -94,12 +94,12 @@ public class ClassPathFileSystemWatcherTests {
|
||||||
public static class Config {
|
public static class Config {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public Environment environemnt;
|
public Environment environment;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public ClassPathFileSystemWatcher watcher() {
|
public ClassPathFileSystemWatcher watcher() {
|
||||||
FileSystemWatcher watcher = new FileSystemWatcher(false, 100, 10);
|
FileSystemWatcher watcher = new FileSystemWatcher(false, 100, 10);
|
||||||
URL[] urls = this.environemnt.getProperty("urls", URL[].class);
|
URL[] urls = this.environment.getProperty("urls", URL[].class);
|
||||||
return new ClassPathFileSystemWatcher(
|
return new ClassPathFileSystemWatcher(
|
||||||
new MockFileSystemWatcherFactory(watcher), restartStrategy(), urls);
|
new MockFileSystemWatcherFactory(watcher), restartStrategy(), urls);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ public class ClassLoaderFilesTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void serialzie() throws Exception {
|
public void serialize() throws Exception {
|
||||||
ClassLoaderFile file = new ClassLoaderFile(Kind.ADDED, new byte[10]);
|
ClassLoaderFile file = new ClassLoaderFile(Kind.ADDED, new byte[10]);
|
||||||
this.files.addFile("myfile", file);
|
this.files.addFile("myfile", file);
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public class HttpTunnelConnectionTests {
|
||||||
|
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
private ByteArrayOutputStream incommingData;
|
private ByteArrayOutputStream incomingData;
|
||||||
|
|
||||||
private WritableByteChannel incomingChannel;
|
private WritableByteChannel incomingChannel;
|
||||||
|
|
||||||
|
|
@ -71,8 +71,8 @@ public class HttpTunnelConnectionTests {
|
||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
this.url = "http://localhost:" + this.port;
|
this.url = "http://localhost:" + this.port;
|
||||||
this.incommingData = new ByteArrayOutputStream();
|
this.incomingData = new ByteArrayOutputStream();
|
||||||
this.incomingChannel = Channels.newChannel(this.incommingData);
|
this.incomingChannel = Channels.newChannel(this.incomingData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -129,7 +129,7 @@ public class HttpTunnelConnectionTests {
|
||||||
write(channel, "hello");
|
write(channel, "hello");
|
||||||
write(channel, "1+1");
|
write(channel, "1+1");
|
||||||
write(channel, "1+2");
|
write(channel, "1+2");
|
||||||
assertThat(this.incommingData.toString(), equalTo("hi=2=3"));
|
assertThat(this.incomingData.toString(), equalTo("hi=2=3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -140,7 +140,7 @@ public class HttpTunnelConnectionTests {
|
||||||
this.requestFactory.willRespond("hi");
|
this.requestFactory.willRespond("hi");
|
||||||
TunnelChannel channel = openTunnel(true);
|
TunnelChannel channel = openTunnel(true);
|
||||||
write(channel, "hello");
|
write(channel, "hello");
|
||||||
assertThat(this.incommingData.toString(), equalTo("hi"));
|
assertThat(this.incomingData.toString(), equalTo("hi"));
|
||||||
assertThat(this.requestFactory.getExecutedRequests().size(), greaterThan(10));
|
assertThat(this.requestFactory.getExecutedRequests().size(), greaterThan(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ public class HttpTunnelServerTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void intialRequestIsUsedForFirstServerResponse() throws Exception {
|
public void initialRequestIsUsedForFirstServerResponse() throws Exception {
|
||||||
this.servletRequest.addHeader(SEQ_HEADER, "1");
|
this.servletRequest.addHeader(SEQ_HEADER, "1");
|
||||||
this.servletRequest.setContent("hello".getBytes());
|
this.servletRequest.setContent("hello".getBytes());
|
||||||
this.server.handle(this.request, this.response);
|
this.server.handle(this.request, this.response);
|
||||||
|
|
@ -167,7 +167,7 @@ public class HttpTunnelServerTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void typicalReqestResponseTraffic() throws Exception {
|
public void typicalRequestResponseTraffic() throws Exception {
|
||||||
MockHttpConnection h1 = new MockHttpConnection();
|
MockHttpConnection h1 = new MockHttpConnection();
|
||||||
this.server.handle(h1);
|
this.server.handle(h1);
|
||||||
MockHttpConnection h2 = new MockHttpConnection("hello server", 1);
|
MockHttpConnection h2 = new MockHttpConnection("hello server", 1);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public class StaticPortProviderTests {
|
||||||
public ExpectedException thrown = ExpectedException.none();
|
public ExpectedException thrown = ExpectedException.none();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void portMustBePostive() throws Exception {
|
public void portMustBePositive() throws Exception {
|
||||||
this.thrown.expect(IllegalArgumentException.class);
|
this.thrown.expect(IllegalArgumentException.class);
|
||||||
this.thrown.expectMessage("Port must be positive");
|
this.thrown.expectMessage("Port must be positive");
|
||||||
new StaticPortProvider(0);
|
new StaticPortProvider(0);
|
||||||
|
|
|
||||||
|
|
@ -572,7 +572,7 @@ Spring Boot application can be started as Windows service using
|
||||||
https://github.com/kohsuke/winsw[`winsw`].
|
https://github.com/kohsuke/winsw[`winsw`].
|
||||||
|
|
||||||
A sample https://github.com/snicoll-scratches/spring-boot-daemon[maintained separately]
|
A sample https://github.com/snicoll-scratches/spring-boot-daemon[maintained separately]
|
||||||
to the core of Spring Boot describes steps by steps how you can create a Windows service for
|
to the core of Spring Boot describes step by step how you can create a Windows service for
|
||||||
your Spring Boot application.
|
your Spring Boot application.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -913,7 +913,7 @@ dependencies out-of-the-box so you may want to have a look to the
|
||||||
{propdeps-plugin}[`propdeps-plugin`] in the meantime.
|
{propdeps-plugin}[`propdeps-plugin`] in the meantime.
|
||||||
|
|
||||||
TIP: If you want to ensure that devtools is never included in a production build, you can
|
TIP: If you want to ensure that devtools is never included in a production build, you can
|
||||||
use set the `excludeDevtools` build property to completely remove the JAR. The property is
|
use the `excludeDevtools` build property to completely remove the JAR. The property is
|
||||||
supported with both the Maven and Gradle plugins.
|
supported with both the Maven and Gradle plugins.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1058,7 +1058,7 @@ in the same way.
|
||||||
==== Customizing the restart classloader
|
==== Customizing the restart classloader
|
||||||
As described in the <<using-spring-boot-restart-vs-reload>> section above, restart
|
As described in the <<using-spring-boot-restart-vs-reload>> section above, restart
|
||||||
functionality is implemented by using two classloaders. For most applications this
|
functionality is implemented by using two classloaders. For most applications this
|
||||||
approach works well, however, sometimes in can cause classloading issues.
|
approach works well, however, sometimes it can cause classloading issues.
|
||||||
|
|
||||||
By default, any open project in your IDE will be loaded using the "`restart`" classloader,
|
By default, any open project in your IDE will be loaded using the "`restart`" classloader,
|
||||||
and any regular `.jar` file will be loaded using the "`base`" classloader. If you work on
|
and any regular `.jar` file will be loaded using the "`base`" classloader. If you work on
|
||||||
|
|
@ -1067,7 +1067,7 @@ customize things. To do this you can create a `META-INF/spring-devtools.properti
|
||||||
|
|
||||||
The `spring-devtools.properties` file can contain `restart.exclude.` and
|
The `spring-devtools.properties` file can contain `restart.exclude.` and
|
||||||
`restart.include.` prefixed properties. The `include` elements are items that should be
|
`restart.include.` prefixed properties. The `include` elements are items that should be
|
||||||
pulled-up into the "`restart`" classloader, and the `exclude` elements are items that
|
pulled up into the "`restart`" classloader, and the `exclude` elements are items that
|
||||||
should be pushed down into the "`base`" classloader. The value of the property is a regex
|
should be pushed down into the "`base`" classloader. The value of the property is a regex
|
||||||
pattern that will be applied to the classpath.
|
pattern that will be applied to the classpath.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,8 +51,8 @@ public final class Versions {
|
||||||
|
|
||||||
private static String evaluateExpression(String expression) {
|
private static String evaluateExpression(String expression) {
|
||||||
try {
|
try {
|
||||||
XPathFactory xPathfactory = XPathFactory.newInstance();
|
XPathFactory xPathFactory = XPathFactory.newInstance();
|
||||||
XPath xpath = xPathfactory.newXPath();
|
XPath xpath = xPathFactory.newXPath();
|
||||||
XPathExpression expr = xpath.compile(expression);
|
XPathExpression expr = xpath.compile(expression);
|
||||||
String version = expr.evaluate(
|
String version = expr.evaluate(
|
||||||
new InputSource(new FileReader("target/dependencies-pom.xml")));
|
new InputSource(new FileReader("target/dependencies-pom.xml")));
|
||||||
|
|
|
||||||
|
|
@ -72,13 +72,13 @@ public class WarPackagingTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onlyTomcatIsPackackedInWebInfLibProvided() throws IOException {
|
public void onlyTomcatIsPackagedInWebInfLibProvided() throws IOException {
|
||||||
checkWebInfEntriesForServletContainer("tomcat",
|
checkWebInfEntriesForServletContainer("tomcat",
|
||||||
TOMCAT_EXPECTED_IN_WEB_INF_LIB_PROVIDED);
|
TOMCAT_EXPECTED_IN_WEB_INF_LIB_PROVIDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onlyJettyIsPackackedInWebInfLibProvided() throws IOException {
|
public void onlyJettyIsPackagedInWebInfLibProvided() throws IOException {
|
||||||
checkWebInfEntriesForServletContainer("jetty",
|
checkWebInfEntriesForServletContainer("jetty",
|
||||||
JETTY_EXPECTED_IN_WEB_INF_LIB_PROVIDED);
|
JETTY_EXPECTED_IN_WEB_INF_LIB_PROVIDED);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public class SampleActuatorUiApplication {
|
||||||
@Bean
|
@Bean
|
||||||
public SecurityProperties securityProperties() {
|
public SecurityProperties securityProperties() {
|
||||||
SecurityProperties security = new SecurityProperties();
|
SecurityProperties security = new SecurityProperties();
|
||||||
security.getBasic().setPath(""); // empty so home page is unsecured
|
security.getBasic().setPath(""); // empty so home page is insecured
|
||||||
return security;
|
return security;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration tests for unsecured service endpoints (even with Spring Security on
|
* Integration tests for insecured service endpoints (even with Spring Security on
|
||||||
* classpath).
|
* classpath).
|
||||||
*
|
*
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
|
|
@ -46,7 +46,7 @@ import static org.junit.Assert.assertTrue;
|
||||||
@WebIntegrationTest(value = { "management.security.enabled:false" }, randomPort = true)
|
@WebIntegrationTest(value = { "management.security.enabled:false" }, randomPort = true)
|
||||||
@DirtiesContext
|
@DirtiesContext
|
||||||
@ActiveProfiles("unsecure-management")
|
@ActiveProfiles("unsecure-management")
|
||||||
public class UnsecureManagementSampleActuatorApplicationTests {
|
public class InsecureManagementSampleActuatorApplicationTests {
|
||||||
|
|
||||||
@Value("${local.server.port}")
|
@Value("${local.server.port}")
|
||||||
private int port;
|
private int port;
|
||||||
|
|
@ -34,7 +34,7 @@ import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration tests for unsecured service endpoints (even with Spring Security on
|
* Integration tests for insecured service endpoints (even with Spring Security on
|
||||||
* classpath).
|
* classpath).
|
||||||
*
|
*
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
|
|
@ -43,7 +43,7 @@ import static org.junit.Assert.assertFalse;
|
||||||
@SpringApplicationConfiguration(SampleActuatorApplication.class)
|
@SpringApplicationConfiguration(SampleActuatorApplication.class)
|
||||||
@WebIntegrationTest(value = { "security.basic.enabled:false" }, randomPort = true)
|
@WebIntegrationTest(value = { "security.basic.enabled:false" }, randomPort = true)
|
||||||
@DirtiesContext
|
@DirtiesContext
|
||||||
public class UnsecureSampleActuatorApplicationTests {
|
public class InsecureSampleActuatorApplicationTests {
|
||||||
|
|
||||||
@Value("${local.server.port}")
|
@Value("${local.server.port}")
|
||||||
private int port;
|
private int port;
|
||||||
|
|
@ -34,7 +34,7 @@ import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration tests for unsecured service endpoints (even with Spring Security on
|
* Integration tests for insecured service endpoints (even with Spring Security on
|
||||||
* classpath).
|
* classpath).
|
||||||
*
|
*
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
|
|
@ -44,7 +44,7 @@ import static org.junit.Assert.assertFalse;
|
||||||
@WebIntegrationTest(value = { "security.basic.enabled:false",
|
@WebIntegrationTest(value = { "security.basic.enabled:false",
|
||||||
"server.servletPath:/spring" }, randomPort = true)
|
"server.servletPath:/spring" }, randomPort = true)
|
||||||
@DirtiesContext
|
@DirtiesContext
|
||||||
public class ServletPathUnsecureSampleActuatorApplicationTests {
|
public class ServletPathInsecureSampleActuatorApplicationTests {
|
||||||
|
|
||||||
@Value("${local.server.port}")
|
@Value("${local.server.port}")
|
||||||
private int port;
|
private int port;
|
||||||
|
|
@ -24,7 +24,7 @@ import org.springframework.data.repository.PagingAndSortingRepository;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
||||||
|
|
||||||
@RepositoryRestResource(collectionResourceRel = "citys", path = "cities")
|
@RepositoryRestResource(collectionResourceRel = "cities", path = "cities")
|
||||||
interface CityRepository extends PagingAndSortingRepository<City, Long> {
|
interface CityRepository extends PagingAndSortingRepository<City, Long> {
|
||||||
|
|
||||||
Page<City> findByNameContainingAndCountryContainingAllIgnoringCase(
|
Page<City> findByNameContainingAndCountryContainingAllIgnoringCase(
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,6 @@ public class SampleDataRestApplicationTests {
|
||||||
this.mvc.perform(
|
this.mvc.perform(
|
||||||
get("/api/cities/search/findByNameContainingAndCountryContainingAllIgnoringCase?name=&country=UK"))
|
get("/api/cities/search/findByNameContainingAndCountryContainingAllIgnoringCase?name=&country=UK"))
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("_embedded.citys", hasSize(3)));
|
.andExpect(jsonPath("_embedded.cities", hasSize(3)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ public class SampleSolrApplication implements CommandLineRunner {
|
||||||
System.out.println();
|
System.out.println();
|
||||||
|
|
||||||
// fetch a single product
|
// fetch a single product
|
||||||
System.out.println("Products founds with findByNameStartingWith('So'):");
|
System.out.println("Products found with findByNameStartingWith('So'):");
|
||||||
System.out.println("--------------------------------");
|
System.out.println("--------------------------------");
|
||||||
for (Product product : this.repository.findByNameStartingWith("So")) {
|
for (Product product : this.repository.findByNameStartingWith("So")) {
|
||||||
System.out.println(product);
|
System.out.println(product);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ $ docker-compose up
|
||||||
----
|
----
|
||||||
|
|
||||||
Run the app and ping the home page (http://localhost:8080) a few times. Go and look at
|
Run the app and ping the home page (http://localhost:8080) a few times. Go and look at
|
||||||
the result in the TDB UI, e.g.
|
the result in the TSD UI, e.g.
|
||||||
|
|
||||||
[source,indent=0]
|
[source,indent=0]
|
||||||
----
|
----
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
public class InMemoryMessageRespository implements MessageRepository {
|
public class InMemoryMessageRepository implements MessageRepository {
|
||||||
|
|
||||||
private static AtomicLong counter = new AtomicLong();
|
private static AtomicLong counter = new AtomicLong();
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ public class SampleGroovyTemplateApplication {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public MessageRepository messageRepository() {
|
public MessageRepository messageRepository() {
|
||||||
return new InMemoryMessageRespository();
|
return new InMemoryMessageRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
||||||
|
|
@ -71,17 +71,17 @@ public final class ConfigurationMetadataRepositoryJsonBuilder {
|
||||||
* ignored.
|
* ignored.
|
||||||
* <p>
|
* <p>
|
||||||
* Leaves the stream open when done.
|
* Leaves the stream open when done.
|
||||||
* @param inputstream the source input stream
|
* @param inputStream the source input stream
|
||||||
* @param charset the charset of the input
|
* @param charset the charset of the input
|
||||||
* @return this builder
|
* @return this builder
|
||||||
* @throws IOException in case of I/O errors
|
* @throws IOException in case of I/O errors
|
||||||
*/
|
*/
|
||||||
public ConfigurationMetadataRepositoryJsonBuilder withJsonResource(
|
public ConfigurationMetadataRepositoryJsonBuilder withJsonResource(
|
||||||
InputStream inputstream, Charset charset) throws IOException {
|
InputStream inputStream, Charset charset) throws IOException {
|
||||||
if (inputstream == null) {
|
if (inputStream == null) {
|
||||||
throw new IllegalArgumentException("InputStream must not be null.");
|
throw new IllegalArgumentException("InputStream must not be null.");
|
||||||
}
|
}
|
||||||
this.repositories.add(add(inputstream, charset));
|
this.repositories.add(add(inputStream, charset));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ public class JsonMarshaller {
|
||||||
}
|
}
|
||||||
ItemDeprecation deprecation = item.getDeprecation();
|
ItemDeprecation deprecation = item.getDeprecation();
|
||||||
if (deprecation != null) {
|
if (deprecation != null) {
|
||||||
jsonObject.put("deprecated", true); // backward compat
|
jsonObject.put("deprecated", true); // backward compatibility
|
||||||
JSONObject deprecationJsonObject = new JSONObject();
|
JSONObject deprecationJsonObject = new JSONObject();
|
||||||
if (deprecation.getReason() != null) {
|
if (deprecation.getReason() != null) {
|
||||||
deprecationJsonObject.put("reason", deprecation.getReason());
|
deprecationJsonObject.put("reason", deprecation.getReason());
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ public class ConfigurationMetadataAnnotationProcessorTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void singleDeprecatedProprety() throws Exception {
|
public void singleDeprecatedProperty() throws Exception {
|
||||||
Class<?> type = DeprecatedSingleProperty.class;
|
Class<?> type = DeprecatedSingleProperty.class;
|
||||||
ConfigurationMetadata metadata = compile(type);
|
ConfigurationMetadata metadata = compile(type);
|
||||||
assertThat(metadata, containsGroup("singledeprecated").fromSource(type));
|
assertThat(metadata, containsGroup("singledeprecated").fromSource(type));
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ public class ConfigurationMetadataTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void toDashedCaseWordsUnderScore() {
|
public void toDashedCaseWordsUnderscore() {
|
||||||
assertThat(toDashedCase("Word_With_underscore"), is("word_with_underscore"));
|
assertThat(toDashedCase("Word_With_underscore"), is("word_with_underscore"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void toDashedCaseWordsSeveralUnderScores() {
|
public void toDashedCaseWordsSeveralUnderscores() {
|
||||||
assertThat(toDashedCase("Word___With__underscore"),
|
assertThat(toDashedCase("Word___With__underscore"),
|
||||||
is("word___with__underscore"));
|
is("word___with__underscore"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ import org.springframework.boot.gradle.SpringBootPluginExtension;
|
||||||
*/
|
*/
|
||||||
public class AgentTasksEnhancer implements Action<Project> {
|
public class AgentTasksEnhancer implements Action<Project> {
|
||||||
|
|
||||||
private static final String SPRING_LOADED_AGENT_CLASSNAME = "org.springsource.loaded.agent.SpringLoadedAgent";
|
private static final String SPRING_LOADED_AGENT_CLASS_NAME = "org.springsource.loaded.agent.SpringLoadedAgent";
|
||||||
|
|
||||||
private File agent;
|
private File agent;
|
||||||
|
|
||||||
|
|
@ -83,7 +83,7 @@ public class AgentTasksEnhancer implements Action<Project> {
|
||||||
|
|
||||||
private File getSpringLoadedAgent() {
|
private File getSpringLoadedAgent() {
|
||||||
try {
|
try {
|
||||||
Class<?> loaded = Class.forName(SPRING_LOADED_AGENT_CLASSNAME);
|
Class<?> loaded = Class.forName(SPRING_LOADED_AGENT_CLASS_NAME);
|
||||||
if (loaded != null) {
|
if (loaded != null) {
|
||||||
CodeSource source = loaded.getProtectionDomain().getCodeSource();
|
CodeSource source = loaded.getProtectionDomain().getCodeSource();
|
||||||
if (source != null) {
|
if (source != null) {
|
||||||
|
|
|
||||||
|
|
@ -28,14 +28,14 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public abstract class AgentAttacher {
|
public abstract class AgentAttacher {
|
||||||
|
|
||||||
private static final String VIRTUAL_MACHINE_CLASSNAME = "com.sun.tools.attach.VirtualMachine";
|
private static final String VIRTUAL_MACHINE_CLASS_NAME = "com.sun.tools.attach.VirtualMachine";
|
||||||
|
|
||||||
public static void attach(File agent) {
|
public static void attach(File agent) {
|
||||||
try {
|
try {
|
||||||
String name = ManagementFactory.getRuntimeMXBean().getName();
|
String name = ManagementFactory.getRuntimeMXBean().getName();
|
||||||
String pid = name.substring(0, name.indexOf('@'));
|
String pid = name.substring(0, name.indexOf('@'));
|
||||||
ClassLoader classLoader = JvmUtils.getToolsClassLoader();
|
ClassLoader classLoader = JvmUtils.getToolsClassLoader();
|
||||||
Class<?> vmClass = classLoader.loadClass(VIRTUAL_MACHINE_CLASSNAME);
|
Class<?> vmClass = classLoader.loadClass(VIRTUAL_MACHINE_CLASS_NAME);
|
||||||
Method attachMethod = vmClass.getDeclaredMethod("attach", String.class);
|
Method attachMethod = vmClass.getDeclaredMethod("attach", String.class);
|
||||||
Object vm = attachMethod.invoke(null, pid);
|
Object vm = attachMethod.invoke(null, pid);
|
||||||
Method loadAgentMethod = vmClass.getDeclaredMethod("loadAgent", String.class);
|
Method loadAgentMethod = vmClass.getDeclaredMethod("loadAgent", String.class);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests fir {@link FileUtils}.
|
* Tests for {@link FileUtils}.
|
||||||
*
|
*
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import java.io.InputStream;
|
||||||
public interface RandomAccessData {
|
public interface RandomAccessData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an {@link InputStream} that can be used to read the underling data. The
|
* Returns an {@link InputStream} that can be used to read the underlying data. The
|
||||||
* caller is responsible close the underlying stream.
|
* caller is responsible close the underlying stream.
|
||||||
* @param access hint indicating how the underlying data should be accessed
|
* @param access hint indicating how the underlying data should be accessed
|
||||||
* @return a new input stream that can be used to read the underlying data.
|
* @return a new input stream that can be used to read the underlying data.
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ public class RandomAccessDataFile implements RandomAccessData {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the underling File.
|
* Returns the underlying File.
|
||||||
* @return the underlying file
|
* @return the underlying file
|
||||||
*/
|
*/
|
||||||
public File getFile() {
|
public File getFile() {
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ public final class JarEntryData {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode MSDOS Date Time details. See
|
* Decode MS-DOS Date Time details. See
|
||||||
* <a href="http://mindprod.com/jgloss/zip.html">mindprod.com/jgloss/zip.html</a> for
|
* <a href="http://mindprod.com/jgloss/zip.html">mindprod.com/jgloss/zip.html</a> for
|
||||||
* more details of the format.
|
* more details of the format.
|
||||||
* @param date the date part
|
* @param date the date part
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ public class RandomAccessDataFileTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void inputSteamReadOffsetBytes() throws Exception {
|
public void inputStreamReadOffsetBytes() throws Exception {
|
||||||
byte[] b = new byte[7];
|
byte[] b = new byte[7];
|
||||||
this.inputStream.skip(1);
|
this.inputStream.skip(1);
|
||||||
int amountRead = this.inputStream.read(b, 2, 3);
|
int amountRead = this.inputStream.read(b, 2, 3);
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ import org.springframework.boot.loader.tools.MainClassFinder;
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
|
public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
|
||||||
|
|
||||||
private static final String SPRING_LOADED_AGENT_CLASSNAME = "org.springsource.loaded.agent.SpringLoadedAgent";
|
private static final String SPRING_LOADED_AGENT_CLASS_NAME = "org.springsource.loaded.agent.SpringLoadedAgent";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Maven project.
|
* The Maven project.
|
||||||
|
|
@ -177,7 +177,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
|
||||||
private void findAgent() {
|
private void findAgent() {
|
||||||
try {
|
try {
|
||||||
if (this.agent == null || this.agent.length == 0) {
|
if (this.agent == null || this.agent.length == 0) {
|
||||||
Class<?> loaded = Class.forName(SPRING_LOADED_AGENT_CLASSNAME);
|
Class<?> loaded = Class.forName(SPRING_LOADED_AGENT_CLASS_NAME);
|
||||||
if (loaded != null) {
|
if (loaded != null) {
|
||||||
if (this.noverify == null) {
|
if (this.noverify == null) {
|
||||||
this.noverify = true;
|
this.noverify = true;
|
||||||
|
|
@ -434,7 +434,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
|
||||||
public synchronized void rethrowUncaughtException()
|
public synchronized void rethrowUncaughtException()
|
||||||
throws MojoExecutionException {
|
throws MojoExecutionException {
|
||||||
if (this.exception != null) {
|
if (this.exception != null) {
|
||||||
throw new MojoExecutionException("An exception occured while running. "
|
throw new MojoExecutionException("An exception occurred while running. "
|
||||||
+ this.exception.getMessage(), this.exception);
|
+ this.exception.getMessage(), this.exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
There are tree ways one can exclude a dependency from being packaged/used at runtime
|
There are tree ways one can exclude a dependency from being packaged/used at runtime
|
||||||
|
|
||||||
* Exclude a specific artifact identified by <<<groupId>>> and <<<artifactId>>>
|
* Exclude a specific artifact identified by <<<groupId>>> and <<<artifactId>>>
|
||||||
(optionnaly with a <<<classifier>>> if needed)
|
(optionally with a <<<classifier>>> if needed)
|
||||||
|
|
||||||
* Exclude any artifact matching a given <<<artifactId>>>
|
* Exclude any artifact matching a given <<<artifactId>>>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Usage
|
||||||
The plugin provides several goals to work with a Spring Boot application:
|
The plugin provides several goals to work with a Spring Boot application:
|
||||||
|
|
||||||
* <<<repackage>>>: create a jar or war file that is auto-executable. It can replace the regular artifact or can be
|
* <<<repackage>>>: create a jar or war file that is auto-executable. It can replace the regular artifact or can be
|
||||||
attached to the build lifecyle with a separate <<classifier>>.
|
attached to the build lifecycle with a separate <<classifier>>.
|
||||||
|
|
||||||
* <<<run>>>: run your Spring Boot application with several options to pass parameters to it.
|
* <<<run>>>: run your Spring Boot application with several options to pass parameters to it.
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ Usage
|
||||||
need to be excluded, you can use one of the exclude options,
|
need to be excluded, you can use one of the exclude options,
|
||||||
see {{{./examples/exclude-dependency.html}Exclude a dependency}} for more details.
|
see {{{./examples/exclude-dependency.html}Exclude a dependency}} for more details.
|
||||||
|
|
||||||
The original (i.e. non exectuable) artifact is renamed to <<<.original>>> by default but it is also
|
The original (i.e. non executable) artifact is renamed to <<<.original>>> by default but it is also
|
||||||
possible to keep the original artifact using a custom classifier.
|
possible to keep the original artifact using a custom classifier.
|
||||||
|
|
||||||
The plugin rewrites your manifest, and in particular it manages the <<Main-Class>> and <<Start-Class>>
|
The plugin rewrites your manifest, and in particular it manages the <<Main-Class>> and <<Start-Class>>
|
||||||
|
|
@ -116,7 +116,7 @@ mvn spring-boot:run
|
||||||
|
|
||||||
If you need to specify some JVM arguments (i.e. for debugging purposes), you can use
|
If you need to specify some JVM arguments (i.e. for debugging purposes), you can use
|
||||||
the <<<jvmArguments>>> parameter, see {{{./examples/run-debug.html}Debug the application}}
|
the <<<jvmArguments>>> parameter, see {{{./examples/run-debug.html}Debug the application}}
|
||||||
for more details. As a convenience, the profiles to enable are handed by a specific
|
for more details. As a convenience, the profiles to enable are handled by a specific
|
||||||
property (<<<profiles>>>), see {{{./examples/run-profiles.html}Specify active profiles}}.
|
property (<<<profiles>>>), see {{{./examples/run-profiles.html}Specify active profiles}}.
|
||||||
|
|
||||||
Spring Boot 1.3 has introduced <<<devtools>>>, a module to improve the development-time
|
Spring Boot 1.3 has introduced <<<devtools>>>, a module to improve the development-time
|
||||||
|
|
@ -135,7 +135,7 @@ mvn spring-boot:run
|
||||||
---
|
---
|
||||||
|
|
||||||
When <<<devtools>>> is running, it detects change when you recompile your application and
|
When <<<devtools>>> is running, it detects change when you recompile your application and
|
||||||
automatically refreshes it. This not only work for resources but code as well. It also
|
automatically refreshes it. This works for not only resources but code as well. It also
|
||||||
provides a LiveReload server so that it can automatically trigger a browser refresh whenever
|
provides a LiveReload server so that it can automatically trigger a browser refresh whenever
|
||||||
things change.
|
things change.
|
||||||
|
|
||||||
|
|
@ -148,7 +148,7 @@ spring.devtools.remote.restart.enabled=false
|
||||||
---
|
---
|
||||||
|
|
||||||
Prior to <<<devtools>>>, the plugin supported hot refreshing of resources by default which has
|
Prior to <<<devtools>>>, the plugin supported hot refreshing of resources by default which has
|
||||||
now be disabled in favor of the solution desribed above. You can restore it at any time by
|
now be disabled in favor of the solution described above. You can restore it at any time by
|
||||||
configuring your project:
|
configuring your project:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -173,7 +173,7 @@ spring.devtools.remote.restart.enabled=false
|
||||||
When <<<addResources>>> is enabled, any <<src/main/resources>> folder will be added to
|
When <<<addResources>>> is enabled, any <<src/main/resources>> folder will be added to
|
||||||
the application classpath when you run the application and any duplicate found in
|
the application classpath when you run the application and any duplicate found in
|
||||||
<<target/classes>> will be removed. This allows hot refreshing of resources which can be very
|
<<target/classes>> will be removed. This allows hot refreshing of resources which can be very
|
||||||
useful when developing web applications. For example, you can work on HTML, CSS or JavaScipt
|
useful when developing web applications. For example, you can work on HTML, CSS or JavaScript
|
||||||
files and see your changes immediately without recompiling your application. It is also a helpful
|
files and see your changes immediately without recompiling your application. It is also a helpful
|
||||||
way of allowing your front end developers to work without needing to download and install a Java
|
way of allowing your front end developers to work without needing to download and install a Java
|
||||||
IDE.
|
IDE.
|
||||||
|
|
@ -196,7 +196,7 @@ spring.devtools.remote.restart.enabled=false
|
||||||
While you may start your Spring Boot application very easily from your test (or test suite) itself,
|
While you may start your Spring Boot application very easily from your test (or test suite) itself,
|
||||||
it may be desirable to handle that in the build itself. To make sure that the lifecycle of you Spring
|
it may be desirable to handle that in the build itself. To make sure that the lifecycle of you Spring
|
||||||
Boot application is properly managed <around> your integration tests, you can use the <<<start>>> and
|
Boot application is properly managed <around> your integration tests, you can use the <<<start>>> and
|
||||||
<<<stop>>> goals as desribed below:
|
<<<stop>>> goals as described below:
|
||||||
|
|
||||||
---
|
---
|
||||||
<build>
|
<build>
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ import org.springframework.web.context.support.StandardServletEnvironment;
|
||||||
/**
|
/**
|
||||||
* An {@link EnvironmentPostProcessor} that parses JSON from
|
* An {@link EnvironmentPostProcessor} that parses JSON from
|
||||||
* {@code spring.application.json} or equivalently
|
* {@code spring.application.json} or equivalently
|
||||||
* {@link SpringApplicationJsonEnvironmentPostProcessor} and adds it as a map property
|
* {@code SPRING_APPLICATION_JSON} and adds it as a map property
|
||||||
* source to the {@link Environment}. The new properties are added with higher priority
|
* source to the {@link Environment}. The new properties are added with higher priority
|
||||||
* than the system properties.
|
* than the system properties.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void loggingLevelIsPropagatedToJulI() {
|
public void loggingLevelIsPropagatedToJul() {
|
||||||
this.loggingSystem.beforeInitialize();
|
this.loggingSystem.beforeInitialize();
|
||||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue