parent
c4432a81a8
commit
bea307b115
|
|
@ -79,7 +79,9 @@ dependencies {
|
||||||
implementation("org.assertj:assertj-core")
|
implementation("org.assertj:assertj-core")
|
||||||
implementation("org.glassfish.jersey.core:jersey-server")
|
implementation("org.glassfish.jersey.core:jersey-server")
|
||||||
implementation("org.hibernate:hibernate-jcache")
|
implementation("org.hibernate:hibernate-jcache")
|
||||||
|
implementation("org.jooq:jooq")
|
||||||
implementation("org.slf4j:jul-to-slf4j")
|
implementation("org.slf4j:jul-to-slf4j")
|
||||||
|
implementation("org.springframework:spring-jdbc")
|
||||||
implementation("org.springframework:spring-test")
|
implementation("org.springframework:spring-test")
|
||||||
implementation("org.springframework:spring-web")
|
implementation("org.springframework:spring-web")
|
||||||
implementation("org.springframework:spring-webmvc")
|
implementation("org.springframework:spring-webmvc")
|
||||||
|
|
@ -92,6 +94,7 @@ dependencies {
|
||||||
implementation("org.springframework.restdocs:spring-restdocs-restassured")
|
implementation("org.springframework.restdocs:spring-restdocs-restassured")
|
||||||
implementation("org.springframework.restdocs:spring-restdocs-webtestclient")
|
implementation("org.springframework.restdocs:spring-restdocs-webtestclient")
|
||||||
implementation("org.springframework.security:spring-security-config")
|
implementation("org.springframework.security:spring-security-config")
|
||||||
|
implementation("org.springframework.security:spring-security-oauth2-client")
|
||||||
implementation("org.springframework.security:spring-security-web")
|
implementation("org.springframework.security:spring-security-web")
|
||||||
implementation("org.junit.jupiter:junit-jupiter")
|
implementation("org.junit.jupiter:junit-jupiter")
|
||||||
implementation("org.yaml:snakeyaml")
|
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:
|
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
|
include::{include-springbootfeatures}/webapplications/jersey/JerseyConfig.java[]
|
||||||
public class JerseyConfig extends ResourceConfig {
|
|
||||||
|
|
||||||
public JerseyConfig() {
|
|
||||||
register(Endpoint.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
WARNING: Jersey's support for scanning executable archives is rather limited.
|
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:
|
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
|
include::{include-springbootfeatures}/webapplications/jersey/Endpoint.java[]
|
||||||
@Path("/hello")
|
|
||||||
public class Endpoint {
|
|
||||||
|
|
||||||
@GET
|
|
||||||
public String message() {
|
|
||||||
return "Hello";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
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.
|
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.
|
`WebServerFactoryCustomizer` provides access to the `ConfigurableServletWebServerFactory`, which includes numerous customization setter methods.
|
||||||
The following example shows programmatically setting the port:
|
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;
|
include::{include-springbootfeatures}/webapplications/embeddedservletcontainer/CustomizationBean.java[]
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
`TomcatServletWebServerFactory`, `JettyServletWebServerFactory` and `UndertowServletWebServerFactory` are dedicated variants of `ConfigurableServletWebServerFactory` that have additional customization setter methods for Tomcat, Jetty and Undertow respectively.
|
`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"]
|
[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:
|
The following code shows a typical example:
|
||||||
|
|
||||||
[source,java,pending-extract=true,indent=0]
|
[source,java,indent=0]
|
||||||
----
|
----
|
||||||
@Service
|
include::{include-springbootfeatures}/rsocket/MyService.java[]
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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:
|
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[]
|
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.
|
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:
|
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
|
include::{include-springbootfeatures}/security/OAuthClientConfiguration.java[]
|
||||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
|
||||||
http
|
|
||||||
.authorizeRequests()
|
|
||||||
.anyRequest().authenticated()
|
|
||||||
.and()
|
|
||||||
.oauth2Login()
|
|
||||||
.redirectionEndpoint()
|
|
||||||
.baseUri("/custom-callback");
|
|
||||||
return http.build();
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
TIP: Spring Boot auto-configures an `InMemoryOAuth2AuthorizedClientService` which is used by Spring Security for the management of client registrations.
|
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
|
=== 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:
|
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;
|
include::{include-springbootfeatures}/sql/jdbctemplate/MyBean.java[]
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
You can customize some properties of the template by using the `spring.jdbc.template.*` properties, as shown in the following example:
|
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.
|
Any classes annotated with `@Entity`, `@Embeddable`, or `@MappedSuperclass` are considered.
|
||||||
A typical entity class resembles the following example:
|
A typical entity class resembles the following example:
|
||||||
|
|
||||||
[source,java,pending-extract=true,indent=0]
|
[source,java,indent=0]
|
||||||
----
|
----
|
||||||
package com.example.myapp.domain;
|
include::{include-springbootfeatures}/sql/jpa/City.java[]
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
TIP: You can customize entity scanning locations by using the `@EntityScan` annotation.
|
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:
|
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;
|
include::{include-springbootfeatures}/sql/jpa/CityRepository.java[]
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Spring Data JPA repositories support three different modes of bootstrapping: default, deferred, and lazy.
|
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
|
==== Using DSLContext
|
||||||
The fluent API offered by jOOQ is initiated through the `org.jooq.DSLContext` interface.
|
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`.
|
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
|
include::{include-springbootfeatures}/sql/jooq/JooqExample.java[tag=!method]
|
||||||
public class JooqExample implements CommandLineRunner {
|
|
||||||
|
|
||||||
private final DSLContext create;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public JooqExample(DSLContext dslContext) {
|
|
||||||
this.create = dslContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
TIP: The jOOQ manual tends to use a variable named `create` to hold the `DSLContext`.
|
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:
|
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() {
|
include::{include-springbootfeatures}/sql/jooq/JooqExample.java[tag=method]
|
||||||
return this.create.selectFrom(AUTHOR)
|
|
||||||
.where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1)))
|
|
||||||
.fetch(AUTHOR.DATE_OF_BIRTH);
|
|
||||||
}
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.boot.docs.springbootfeatures.webapplications;
|
package org.springframework.boot.docs.springbootfeatures.webapplications.embeddedservletcontainer;
|
||||||
|
|
||||||
import java.time.Duration;
|
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="BsdDomainSocket" checks="FinalClass" message="SockaddrUn" />
|
||||||
<suppress files="StringSequence" checks="SpringMethodVisibility" message="isEmpty"/>
|
<suppress files="StringSequence" checks="SpringMethodVisibility" message="isEmpty"/>
|
||||||
<suppress files="ValidatorPropertiesWithDefaultValues\.java" checks="SpringMethodVisibility" />
|
<suppress files="ValidatorPropertiesWithDefaultValues\.java" checks="SpringMethodVisibility" />
|
||||||
|
<suppress files="JooqExample.java" checks="SpringAvoidStaticImport" />
|
||||||
</suppressions>
|
</suppressions>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue