parent
							
								
									c4432a81a8
								
							
						
					
					
						commit
						bea307b115
					
				|  | @ -79,7 +79,9 @@ dependencies { | |||
| 	implementation("org.assertj:assertj-core") | ||||
| 	implementation("org.glassfish.jersey.core:jersey-server") | ||||
| 	implementation("org.hibernate:hibernate-jcache") | ||||
| 	implementation("org.jooq:jooq") | ||||
| 	implementation("org.slf4j:jul-to-slf4j") | ||||
| 	implementation("org.springframework:spring-jdbc") | ||||
| 	implementation("org.springframework:spring-test") | ||||
| 	implementation("org.springframework:spring-web") | ||||
| 	implementation("org.springframework:spring-webmvc") | ||||
|  | @ -92,6 +94,7 @@ dependencies { | |||
| 	implementation("org.springframework.restdocs:spring-restdocs-restassured") | ||||
| 	implementation("org.springframework.restdocs:spring-restdocs-webtestclient") | ||||
| 	implementation("org.springframework.security:spring-security-config") | ||||
| 	implementation("org.springframework.security:spring-security-oauth2-client") | ||||
| 	implementation("org.springframework.security:spring-security-web") | ||||
| 	implementation("org.junit.jupiter:junit-jupiter") | ||||
| 	implementation("org.yaml:snakeyaml") | ||||
|  |  | |||
|  | @ -2893,16 +2893,9 @@ Jersey has some native Spring support, so we also provide auto-configuration sup | |||
| 
 | ||||
| To get started with Jersey, include the `spring-boot-starter-jersey` as a dependency and then you need one `@Bean` of type `ResourceConfig` in which you register all the endpoints, as shown in the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0,subs="verbatim,quotes,attributes"] | ||||
| [source,java,indent=0,subs="verbatim,quotes,attributes"] | ||||
| ---- | ||||
| 	@Component | ||||
| 	public class JerseyConfig extends ResourceConfig { | ||||
| 
 | ||||
| 		public JerseyConfig() { | ||||
| 			register(Endpoint.class); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/webapplications/jersey/JerseyConfig.java[] | ||||
| ---- | ||||
| 
 | ||||
| WARNING: Jersey's support for scanning executable archives is rather limited. | ||||
|  | @ -2913,18 +2906,9 @@ For more advanced customizations, you can also register an arbitrary number of b | |||
| 
 | ||||
| All the registered endpoints should be `@Components` with HTTP resource annotations (`@GET` and others), as shown in the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0,subs="verbatim,quotes,attributes"] | ||||
| [source,java,indent=0,subs="verbatim,quotes,attributes"] | ||||
| ---- | ||||
| 	@Component | ||||
| 	@Path("/hello") | ||||
| 	public class Endpoint { | ||||
| 
 | ||||
| 		@GET | ||||
| 		public String message() { | ||||
| 			return "Hello"; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/webapplications/jersey/Endpoint.java[] | ||||
| ---- | ||||
| 
 | ||||
| Since the `Endpoint` is a Spring `@Component`, its lifecycle is managed by Spring and you can use the `@Autowired` annotation to inject dependencies and use the `@Value` annotation to inject external configuration. | ||||
|  | @ -3036,21 +3020,9 @@ If you need to programmatically configure your embedded servlet container, you c | |||
| `WebServerFactoryCustomizer` provides access to the `ConfigurableServletWebServerFactory`, which includes numerous customization setter methods. | ||||
| The following example shows programmatically setting the port: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	import org.springframework.boot.web.server.WebServerFactoryCustomizer; | ||||
| 	import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; | ||||
| 	import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| 	@Component | ||||
| 	public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { | ||||
| 
 | ||||
| 		@Override | ||||
| 		public void customize(ConfigurableServletWebServerFactory server) { | ||||
| 			server.setPort(9000); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/webapplications/embeddedservletcontainer/CustomizationBean.java[] | ||||
| ---- | ||||
| 
 | ||||
| `TomcatServletWebServerFactory`, `JettyServletWebServerFactory` and `UndertowServletWebServerFactory` are dedicated variants of `ConfigurableServletWebServerFactory` that have additional customization setter methods for Tomcat, Jetty and Undertow respectively. | ||||
|  | @ -3058,7 +3030,7 @@ The following example shows how to customize `TomcatServletWebServerFactory` tha | |||
| 
 | ||||
| [source,java,indent=0,subs="verbatim,quotes,attributes"] | ||||
| ---- | ||||
| include::{include-springbootfeatures}/webapplications/TomcatServerCustomizer.java[] | ||||
| include::{include-springbootfeatures}/webapplications/embeddedservletcontainer/TomcatServerCustomizer.java[] | ||||
| ---- | ||||
| 
 | ||||
| 
 | ||||
|  | @ -3226,24 +3198,9 @@ This is done on purpose since this builder is stateful and you shouldn't create | |||
| 
 | ||||
| The following code shows a typical example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	@Service | ||||
| 	public class MyService { | ||||
| 
 | ||||
| 		private final Mono<RSocketRequester> rsocketRequester; | ||||
| 
 | ||||
| 		public MyService(RSocketRequester.Builder rsocketRequesterBuilder) { | ||||
| 			this.rsocketRequester = rsocketRequesterBuilder | ||||
| 					.connectTcp("example.org", 9898).cache(); | ||||
| 		} | ||||
| 
 | ||||
| 		public Mono<User> someRSocketCall(String name) { | ||||
| 			return this.rsocketRequester.flatMap(req -> | ||||
| 			            req.route("user").data(name).retrieveMono(User.class)); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/rsocket/MyService.java[] | ||||
| ---- | ||||
| 
 | ||||
| 
 | ||||
|  | @ -3310,7 +3267,7 @@ Spring Boot provides convenience methods that can be used to override access rul | |||
| 
 | ||||
| For example, you can customize your security configuration by adding something like: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| include::{include-springbootfeatures}/security/CustomWebFluxSecurityConfiguration.java[] | ||||
| ---- | ||||
|  | @ -3389,19 +3346,9 @@ By default, Spring Security's `OAuth2LoginAuthenticationFilter` only processes U | |||
| If you want to customize the `redirect-uri` to use a different pattern, you need to provide configuration to process that custom pattern. | ||||
| For example, for servlet applications, you can add your own `SecurityFilterChain` that resembles the following: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
|     @Bean | ||||
|     public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { | ||||
|         http | ||||
|             .authorizeRequests() | ||||
|                 .anyRequest().authenticated() | ||||
|                 .and() | ||||
|             .oauth2Login() | ||||
|                 .redirectionEndpoint() | ||||
|                     .baseUri("/custom-callback"); | ||||
|         return http.build(); | ||||
|     } | ||||
| include::{include-springbootfeatures}/security/OAuthClientConfiguration.java[] | ||||
| ---- | ||||
| 
 | ||||
| TIP: Spring Boot auto-configures an `InMemoryOAuth2AuthorizedClientService` which is used by Spring Security for the management of client registrations. | ||||
|  | @ -3713,25 +3660,9 @@ For example, the following section in `application.properties` shows how you can | |||
| === Using JdbcTemplate | ||||
| Spring's `JdbcTemplate` and `NamedParameterJdbcTemplate` classes are auto-configured, and you can `@Autowire` them directly into your own beans, as shown in the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	import org.springframework.beans.factory.annotation.Autowired; | ||||
| 	import org.springframework.jdbc.core.JdbcTemplate; | ||||
| 	import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| 	@Component | ||||
| 	public class MyBean { | ||||
| 
 | ||||
| 		private final JdbcTemplate jdbcTemplate; | ||||
| 
 | ||||
| 		@Autowired | ||||
| 		public MyBean(JdbcTemplate jdbcTemplate) { | ||||
| 			this.jdbcTemplate = jdbcTemplate; | ||||
| 		} | ||||
| 
 | ||||
| 		// ... | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/sql/jdbctemplate/MyBean.java[] | ||||
| ---- | ||||
| 
 | ||||
| You can customize some properties of the template by using the `spring.jdbc.template.*` properties, as shown in the following example: | ||||
|  | @ -3773,49 +3704,9 @@ By default, all packages below your main configuration class (the one annotated | |||
| Any classes annotated with `@Entity`, `@Embeddable`, or `@MappedSuperclass` are considered. | ||||
| A typical entity class resembles the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	package com.example.myapp.domain; | ||||
| 
 | ||||
| 	import java.io.Serializable; | ||||
| 	import javax.persistence.*; | ||||
| 
 | ||||
| 	@Entity | ||||
| 	public class City implements Serializable { | ||||
| 
 | ||||
| 		@Id | ||||
| 		@GeneratedValue | ||||
| 		private Long id; | ||||
| 
 | ||||
| 		@Column(nullable = false) | ||||
| 		private String name; | ||||
| 
 | ||||
| 		@Column(nullable = false) | ||||
| 		private String state; | ||||
| 
 | ||||
| 		// ... additional members, often include @OneToMany mappings | ||||
| 
 | ||||
| 		protected City() { | ||||
| 			// no-args constructor required by JPA spec | ||||
| 			// this one is protected since it shouldn't be used directly | ||||
| 		} | ||||
| 
 | ||||
| 		public City(String name, String state) { | ||||
| 			this.name = name; | ||||
| 			this.state = state; | ||||
| 		} | ||||
| 
 | ||||
| 		public String getName() { | ||||
| 			return this.name; | ||||
| 		} | ||||
| 
 | ||||
| 		public String getState() { | ||||
| 			return this.state; | ||||
| 		} | ||||
| 
 | ||||
| 		// ... etc | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/sql/jpa/City.java[] | ||||
| ---- | ||||
| 
 | ||||
| TIP: You can customize entity scanning locations by using the `@EntityScan` annotation. | ||||
|  | @ -3836,20 +3727,9 @@ If you use auto-configuration, repositories are searched from the package contai | |||
| 
 | ||||
| The following example shows a typical Spring Data repository interface definition: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	package com.example.myapp.domain; | ||||
| 
 | ||||
| 	import org.springframework.data.domain.*; | ||||
| 	import org.springframework.data.repository.*; | ||||
| 
 | ||||
| 	public interface CityRepository extends Repository<City, Long> { | ||||
| 
 | ||||
| 		Page<City> findAll(Pageable pageable); | ||||
| 
 | ||||
| 		City findByNameAndStateAllIgnoringCase(String name, String state); | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/sql/jpa/CityRepository.java[] | ||||
| ---- | ||||
| 
 | ||||
| Spring Data JPA repositories support three different modes of bootstrapping: default, deferred, and lazy. | ||||
|  | @ -3979,34 +3859,20 @@ The following listing shows an example: | |||
| ==== Using DSLContext | ||||
| The fluent API offered by jOOQ is initiated through the `org.jooq.DSLContext` interface. | ||||
| Spring Boot auto-configures a `DSLContext` as a Spring Bean and connects it to your application `DataSource`. | ||||
| To use the `DSLContext`, you can `@Autowire` it, as shown in the following example: | ||||
| To use the `DSLContext`, you can inject it, as shown in the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	@Component | ||||
| 	public class JooqExample implements CommandLineRunner { | ||||
| 
 | ||||
| 		private final DSLContext create; | ||||
| 
 | ||||
| 		@Autowired | ||||
| 		public JooqExample(DSLContext dslContext) { | ||||
| 			this.create = dslContext; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| include::{include-springbootfeatures}/sql/jooq/JooqExample.java[tag=!method] | ||||
| ---- | ||||
| 
 | ||||
| TIP: The jOOQ manual tends to use a variable named `create` to hold the `DSLContext`. | ||||
| 
 | ||||
| You can then use the `DSLContext` to construct your queries, as shown in the following example: | ||||
| 
 | ||||
| [source,java,pending-extract=true,indent=0] | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	public List<GregorianCalendar> authorsBornAfter1980() { | ||||
| 		return this.create.selectFrom(AUTHOR) | ||||
| 			.where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1))) | ||||
| 			.fetch(AUTHOR.DATE_OF_BIRTH); | ||||
| 	} | ||||
| include::{include-springbootfeatures}/sql/jooq/JooqExample.java[tag=method] | ||||
| ---- | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,43 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.rsocket; | ||||
| 
 | ||||
| import reactor.core.publisher.Mono; | ||||
| 
 | ||||
| import org.springframework.messaging.rsocket.RSocketRequester; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| @Service | ||||
| public class MyService { | ||||
| 
 | ||||
| 	private final RSocketRequester rsocketRequester; | ||||
| 
 | ||||
| 	public MyService(RSocketRequester.Builder rsocketRequesterBuilder) { | ||||
| 		this.rsocketRequester = rsocketRequesterBuilder.tcp("example.org", 9898); | ||||
| 	} | ||||
| 
 | ||||
| 	public Mono<User> someRSocketCall(String name) { | ||||
| 		return this.rsocketRequester.route("user").data(name).retrieveMono(User.class); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // @chomp:file | ||||
| 
 | ||||
| class User { | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,34 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.security; | ||||
| 
 | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||||
| import org.springframework.security.web.SecurityFilterChain; | ||||
| 
 | ||||
| @Configuration | ||||
| public class OAuthClientConfiguration { | ||||
| 
 | ||||
| 	@Bean | ||||
| 	public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { | ||||
| 		http.authorizeRequests().anyRequest().authenticated(); | ||||
| 		http.oauth2Login().redirectionEndpoint().baseUri("custom-callback"); | ||||
| 		return http.build(); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,35 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.sql.jdbctemplate; | ||||
| 
 | ||||
| import org.springframework.jdbc.core.JdbcTemplate; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| public class MyBean { | ||||
| 
 | ||||
| 	private final JdbcTemplate jdbcTemplate; | ||||
| 
 | ||||
| 	public MyBean(JdbcTemplate jdbcTemplate) { | ||||
| 		this.jdbcTemplate = jdbcTemplate; | ||||
| 	} | ||||
| 
 | ||||
| 	public void doSomething() { | ||||
| 		/* @chomp:line this.jdbcTemplate ... */ this.jdbcTemplate.execute("delete from customer"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,46 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.sql.jooq; | ||||
| 
 | ||||
| import java.util.GregorianCalendar; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import org.jooq.DSLContext; | ||||
| 
 | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import static org.springframework.boot.docs.springbootfeatures.sql.jooq.Tables.AUTHOR; | ||||
| 
 | ||||
| @Component | ||||
| public class JooqExample { | ||||
| 
 | ||||
| 	private final DSLContext create; | ||||
| 
 | ||||
| 	public JooqExample(DSLContext dslContext) { | ||||
| 		this.create = dslContext; | ||||
| 	} | ||||
| 
 | ||||
| 	// tag::method[] | ||||
| 	public List<GregorianCalendar> authorsBornAfter1980() { | ||||
| 		// @formatter:off | ||||
| 		return this.create.selectFrom(AUTHOR) | ||||
| 				.where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1))) | ||||
| 				.fetch(AUTHOR.DATE_OF_BIRTH); | ||||
| 		// @formatter:on | ||||
| 	} // end::method[] | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,49 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.sql.jooq; | ||||
| 
 | ||||
| import java.util.GregorianCalendar; | ||||
| 
 | ||||
| import org.jooq.Name; | ||||
| import org.jooq.Table; | ||||
| import org.jooq.TableField; | ||||
| import org.jooq.impl.TableImpl; | ||||
| import org.jooq.impl.TableRecordImpl; | ||||
| 
 | ||||
| abstract class Tables { | ||||
| 
 | ||||
| 	static final TAuthor AUTHOR = null; | ||||
| 
 | ||||
| 	abstract class TAuthor extends TableImpl<TAuthorRecord> { | ||||
| 
 | ||||
| 		TAuthor(Name name) { | ||||
| 			super(name); | ||||
| 		} | ||||
| 
 | ||||
| 		public final TableField<TAuthorRecord, GregorianCalendar> DATE_OF_BIRTH = null; | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	abstract class TAuthorRecord extends TableRecordImpl<TAuthorRecord> { | ||||
| 
 | ||||
| 		TAuthorRecord(Table<TAuthorRecord> table) { | ||||
| 			super(table); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,61 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.sql.jpa; | ||||
| 
 | ||||
| import java.io.Serializable; | ||||
| 
 | ||||
| import javax.persistence.Column; | ||||
| import javax.persistence.Entity; | ||||
| import javax.persistence.GeneratedValue; | ||||
| import javax.persistence.Id; | ||||
| 
 | ||||
| @Entity | ||||
| public class City implements Serializable { | ||||
| 
 | ||||
| 	@Id | ||||
| 	@GeneratedValue | ||||
| 	private Long id; | ||||
| 
 | ||||
| 	@Column(nullable = false) | ||||
| 	private String name; | ||||
| 
 | ||||
| 	@Column(nullable = false) | ||||
| 	private String state; | ||||
| 
 | ||||
| 	// ... additional members, often include @OneToMany mappings | ||||
| 
 | ||||
| 	protected City() { | ||||
| 		// no-args constructor required by JPA spec | ||||
| 		// this one is protected since it shouldn't be used directly | ||||
| 	} | ||||
| 
 | ||||
| 	public City(String name, String state) { | ||||
| 		this.name = name; | ||||
| 		this.state = state; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return this.name; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getState() { | ||||
| 		return this.state; | ||||
| 	} | ||||
| 
 | ||||
| 	// ... etc | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,29 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.sql.jpa; | ||||
| 
 | ||||
| import org.springframework.data.domain.Page; | ||||
| import org.springframework.data.domain.Pageable; | ||||
| import org.springframework.data.repository.Repository; | ||||
| 
 | ||||
| public interface CityRepository extends Repository<City, Long> { | ||||
| 
 | ||||
| 	Page<City> findAll(Pageable pageable); | ||||
| 
 | ||||
| 	City findByNameAndStateAllIgnoringCase(String name, String state); | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,31 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.webapplications.embeddedservletcontainer; | ||||
| 
 | ||||
| import org.springframework.boot.web.server.WebServerFactoryCustomizer; | ||||
| import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void customize(ConfigurableServletWebServerFactory server) { | ||||
| 		server.setPort(9000); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -14,7 +14,7 @@ | |||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.webapplications; | ||||
| package org.springframework.boot.docs.springbootfeatures.webapplications.embeddedservletcontainer; | ||||
| 
 | ||||
| import java.time.Duration; | ||||
| 
 | ||||
|  | @ -0,0 +1,33 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.webapplications.jersey; | ||||
| 
 | ||||
| import javax.ws.rs.GET; | ||||
| import javax.ws.rs.Path; | ||||
| 
 | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| @Path("/hello") | ||||
| public class Endpoint { | ||||
| 
 | ||||
| 	@GET | ||||
| 	public String message() { | ||||
| 		return "Hello"; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,30 @@ | |||
| /* | ||||
|  * Copyright 2012-2021 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.boot.docs.springbootfeatures.webapplications.jersey; | ||||
| 
 | ||||
| import org.glassfish.jersey.server.ResourceConfig; | ||||
| 
 | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| public class JerseyConfig extends ResourceConfig { | ||||
| 
 | ||||
| 	public JerseyConfig() { | ||||
| 		register(Endpoint.class); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -50,4 +50,5 @@ | |||
| 	<suppress files="BsdDomainSocket" checks="FinalClass" message="SockaddrUn" /> | ||||
| 	<suppress files="StringSequence" checks="SpringMethodVisibility" message="isEmpty"/> | ||||
| 	<suppress files="ValidatorPropertiesWithDefaultValues\.java" checks="SpringMethodVisibility" /> | ||||
| 	<suppress files="JooqExample.java" checks="SpringAvoidStaticImport" /> | ||||
| </suppressions> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue