我正在尝试在 Google 的容器引擎 (GKE) 上部署我的 Spring Boot/JHipster 应用程序。我已经弄清楚了大部分事情,但是我的数据库实例(一个在 Google Cloud SQL 上运行的 PostgreSQL 实例,带有 Google SQL 代理)有问题。
deployment.yaml 片段:
- image: gcr.io/cloudsql-docker/gce-proxy:1.09
name: cloudsql-proxy
command: ["/cloud_sql_proxy", "--dir=/cloudsql",
"-instances=[my-project]:us-central1:[my-sql-instance-id]=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
Run Code Online (Sandbox Code Playgroud)
最后,我更新了我的 Spring Boot 配置 yaml 文件,如下所示:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://google/[my-database]?socketFactory=com.google.cloud.sql.postgres.SocketFactory&socketFactoryArg=[my-project]:us-central1:[my-sql-instance-id]
username: ${DB_USER}
password: ${DB_PASSWORD}
Run Code Online (Sandbox Code Playgroud)
当 …
java google-cloud-sql spring-boot kubernetes google-kubernetes-engine
在 Spring Boot 项目 Java8 中,使用 hibernate-spatial 和 PostgresDB 9.4
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.2.10.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
应用程序属性
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect
Run Code Online (Sandbox Code Playgroud)
(我也试过 PostgisPG9Dialect)
我的实体有一个财产
...
import com.vividsolutions.jts.geom.Point;
....
@Column(columnDefinition = "Point")
private Point cityLocation;
Run Code Online (Sandbox Code Playgroud)
如果我用空值保存就可以了,但是如果我输入一个值
setCityLocation(new GeometryFactory().createPoint(new Coordinate(lng, lat));
Run Code Online (Sandbox Code Playgroud)
我有:
PSQLException: ERROR: column "city_location" is of type point but expression is of type bytea You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)
在我的数据库中,我可以看到列定义为
type: point
column size: 2147483647
data type: 1111
num prec radix: 10
char octet length: 2147483647
Run Code Online (Sandbox Code Playgroud)
我快疯了...为什么它不起作用?
更新(它仍然不起作用,我正在收集新信息) …
我有两个不同的微服务,使用 eureka 作为服务注册表,现在我试图从另一个调用微服务,使用功能区解析端点以进行客户端负载平衡。
服务一:
这个服务暴露了一个端点,http://localhost:15000/api/user/{userId},application.yml 如下,
# Spring properties
spring:
application:
name: user_microservice
cloud:
config:
discovery:
enabled: false
# HTTP Server
server:
port: 15000 # HTTP (Tomcat) port
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
instanceId: ${spring.application.name}:${random.int}
metadataMap:
instanceId: ${spring.application.name}:${random.int}
logging:
level:
com.netflix.discovery: 'OFF'
org.springframework.cloud: 'DEBUG'
Run Code Online (Sandbox Code Playgroud)
调用服务 A 的服务 B 具有以下应用程序类:
@EnableDiscoveryClient
@SpringBootApplication
public class UserSummaryApplication {
public static void main(String[] args) {
SpringApplication.run(UserSummaryApplication.class, args);
}
@Bean(name = "restTemplate")
RestTemplate restTemplate() {
return new RestTemplate(); …Run Code Online (Sandbox Code Playgroud) 我已经启动了mysqldocker 镜像。
来自docker ps:
bcb0a900b693 mysql:latest "docker-entrypoint..." 5 hours ago Up About an hour 0.0.0.0:3306->3306/tcp chrisbolton
我创建了一个基本spring boot项目,在其中创建了一个简单的类。
@SpringBootApplication
@RestController
public class ChrisboltonServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ChrisboltonServiceApplication.class, args);
}
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping("/hello")
public String sayHello(){
return "Hello";
}
@RequestMapping(path="/blogs")
public @ResponseBody Iterable<ChrisBolton> getAllUsers() {
List<ChrisBolton> result = jdbcTemplate.query(
"SELECT * FROM blog",
(rs, rowNum) -> new ChrisBolton(rs.getString("author"),
rs.getString("title"),
rs.getString("content"),
rs.getDate("date"))
);
return result;
}
Run Code Online (Sandbox Code Playgroud)
}
我已经把我的配置放在我的 application.properties
spring.main.banner-mode=off …Run Code Online (Sandbox Code Playgroud) 我有一个简单的控制器
@RestController
@RequestMapping("path")
public class MyController {
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<SomeObject> run(@RequestBody Flux<RequestObject> request){
//do something and return flux
}
...
}
Run Code Online (Sandbox Code Playgroud)
在调用此网址时,我收到异常
"Type definition error: [simple type, class reactor.core.publisher.Flux]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Can not construct instance of reactor.core.publisher.Flux (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (PushbackInputStream); line: 1, column: 1]
Run Code Online (Sandbox Code Playgroud)
我理解这个错误,通常,如果需要,我只会添加一个注释
@JsonDeserialize(as = SomeConcreteClass.class)
但是在这种情况下,我应该绑定到哪个 …
我正在尝试从 spring-bean.xml 中的 application.yml 读取属性,如下所示:
<bean name="#{bean.name}" />
Run Code Online (Sandbox Code Playgroud)
是否可以 ?或者我应该指定我的 application.yml 文件的位置?
我正在尝试使用Spring Boot 1.5.6.RELEASE和Spring Cloud Dalston.SR3来实现微服务架构后端,它们将由移动/Web 端点使用。
API网关应用
@SpringBootApplicatio
@EnableEurekaClient
@EnableZuulProxy
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
接口安全
@Configuration
@EnableWebSecurity
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@EnableOAuth2Sso
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/sign-up", "/login")
.permitAll()
.anyRequest()
.authenticated()
.and()
.csrf()
.ignoringAntMatchers("/sign-up", "/login")
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
}
Run Code Online (Sandbox Code Playgroud)
Gradle 安全相关的依赖项
// Spring OAuth2 security
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.security.oauth:spring-security-oauth2")
compile("org.springframework.cloud:spring-cloud-starter-oauth2")
compile("org.springframework.security:spring-security-jwt")
Run Code Online (Sandbox Code Playgroud)
祖尔路线
zuul: …Run Code Online (Sandbox Code Playgroud) spring-boot spring-security-oauth2 netflix-zuul spring-cloud-netflix
我意识到在 SO 上有几个关于这个主题的类似未解决的问题,但是,我在 GitHub 上包含了一个可克隆的 MCVE,因此很容易重现问题场景。
设想
我正在尝试根据 Spring Boot文档实现一个 Spring Boot 退出代码生成器。看起来 Spring Boot 正在调用退出代码生成器,但应用程序以代码 0 退出,而不是给定的退出代码。我错过了什么?
@SpringBootApplication
@Configuration
@Slf4j
class App implements CommandLineRunner {
@Autowired ConfigurableApplicationContext ctx
static void main(String[] args) {
SpringApplication.run(App.class, args)
}
@Override
void run(String... args) throws Exception {
SpringApplication.exit(ctx, new ExitCodeGenerator() {
@Override
int getExitCode() {
log.info 'retrieving exit code.'
return -1
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Users\pc\IdeaProjects\spring-exit-code-gen>gradlew bootRepackage
C:\Users\pc\IdeaProjects\spring-exit-code-gen>java -jar build/libs/spring-exit-code-gen-1-0.0.1-SNAPSHOT.jar
2017-09-13 12:26:53.819 INFO 2832 --- [ …Run Code Online (Sandbox Code Playgroud) 我已经在我的 application.properties 中设置了上下文路径,但是在运行 spring boot 应用程序时,我收到了一个错误,例如:-
ContextPath must start with '/' and not end with '/'
这是代码:-
演示应用程序:-
package com.ravat.demo;
import com.ravat.controller.DemoController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@ComponentScan(basePackages = "com.ravat.controller")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
演示控制器.java
package com.ravat.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@RequestMapping("/index")
public String root(){
return "Index Page";
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序属性:
server.port = 8085
server.context-path="/myApp"
Run Code Online (Sandbox Code Playgroud)
但是在服务器启动时我收到一个错误:-
Error starting ApplicationContext. …Run Code Online (Sandbox Code Playgroud) 我最近在 SpringBoot 项目中添加了一个 ApplicationStartup 类
@Component
public class ApplicationStartup
implements ApplicationListener<ApplicationReadyEvent> { ...
Run Code Online (Sandbox Code Playgroud)
它实现了 ApplicationListener。
现在,当我运行与该类无关的旧 JUNit 测试时,testrunner 尝试运行我的 StartupListener,这在这些情况下既不必要也不合适。
我的测试初始化时如何跳过 ApplicationListener?
@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
Run Code Online (Sandbox Code Playgroud) spring-boot ×10
java ×5
spring ×4
groovy ×1
jackson ×1
java-8 ×1
junit ×1
kubernetes ×1
mysql ×1
netflix-zuul ×1
point ×1
postgis ×1
reactor ×1
springrunner ×1