我正在构建一个部署到 Tomcat 的 Spring Boot Web 应用程序,它使用 JNDI 构建一个 DataSource bean。
我有以下条目application.properties以防止在 JMX 中创建重复的 DataSource MBean
# Prevent Spring from automatically exposing beans to JMX. Tomcat automatically creates an MBean when setting the
# JNDI data source, and an error gets thrown if spring then tries to add the data source MBean itself.
spring.jmx.enabled=false
Run Code Online (Sandbox Code Playgroud)
但我的问题是:有一个名为的属性被默认spring.datasource.jmx-enabled设置为false。这似乎是一个细粒度的设置,应该只禁止数据源 MBean 被 Spring 公开,对吗?但事实并非如此。除非我禁用所有 JMX,否则 DataSource MBean 将被复制。
我现在正处于十字路口。我的目标是自动创建我的 ECS 架构并将我的 docker-compose 服务部署到 ECS Fargate,但是有很多方法可以做到这一点!
希望从社区获得一些关于选择适合工作的工具的见解。其中每一个的用例是什么?我什么时候应该选择其中之一?
Docker ECS 集成
https://docs.docker.com/cloud/ecs-integration/
ecs-cli
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html
AWS Copilot
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Copilot.html
AWS CLI ecs
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecs/index.html
我有一个多模块 Maven 项目,它共享一个公共的父 pom.xml。其中一些模块将使用 Spring Boot,但有些则不会。我不想使用 Spring Boot 作为我的父 pom 的父项,并且在不使用它们的模块中存在不必要的依赖项。
不使用Spring Boot父pom会有什么后果?一切都仍然可以与所有自动配置的优点一起使用吗?我正在考虑以下解决方案,将其放入我的父 pom 中作为替代方案
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
但我对所有这些 Maven 东西和 Spring Boot 都很陌生,所以我不希望出现任何意想不到的后果,也不希望以任何方式削弱 Spring Boot 的功能。有人可以解释一下,如果我这样做,我会失去什么(如果有的话)?谢谢!
我正在构建一个网络应用程序,当用户单击按钮时需要打印报告。报告中的所有内容在页面上都不可见,只有在用户单击按钮时才会创建。我最初的想法是简单地打开一个新窗口,设置内容,然后打印后关闭窗口。然而,这不是一个选项,因为用户在信息亭模式下使用浏览器,无法打开新选项卡/窗口。要求是报表需要在不从当前页面重定向的情况下打印。仅应打印报告本身,不能包含当前页面的任何内容。
我知道这已经在这里发布了多次,但我已经看过很多这些帖子,这就是我现在的样子。
当我单击按钮并打印页面时,它会打印一张空白页。我不知道为什么这不起作用。
这是我到目前为止所拥有的
超文本标记语言
<html class="printable">
<head>
<link rel="stylesheet" type="text/css" href="css/print-style.css">
<script src="js/jquery.js"></script>
<script src="js/report.js"></script>
</head>
<body class="printable">
<div>
<h1>Content that shouldn't print</h1>
<h2>Content that shouldn't print</h2>
<h3>Content that shouldn't print</h3>
<h4>Content that shouldn't print</h4>
</div>
<div id="report" class="print-only"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
CSS
@media print {
:not(.printable) {
display: none;
}
.print-only {
display: block;
}
}
.print-only {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript
$(function() {
$("#print-button").click(function() {
$.ajax({
url: "get-report",
success: function(resp) {
$("#report").html(resp); // populate the report div with …Run Code Online (Sandbox Code Playgroud) 我在我的 web mvc 应用程序中使用 spring-boot-start-web 依赖项并使用 logback。我的静态资源目录中有一个 logback-spring.xml 文件,其配置如下
<property name="MY_LOG_FILE" value="C:\mylog.log" />
<appender name="MY_APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${MY_LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${MY_LOG_FILE}.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
Run Code Online (Sandbox Code Playgroud)
<logger name="com.mydomain.myapp" level="INFO" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="MY_APPENDER" />
</logger>
Run Code Online (Sandbox Code Playgroud)
当我在控制器中使用记录器时,它会正确记录到控制台输出,但找不到该文件。至于我可以在网上找到的内容,看起来我设置正确,但显然我不是。
编辑:它最终通过在父项目上执行 Maven 更新项目来解决,该项目是更大的模块系统的一部分。
对于我的 REST API,我使用 JWT 进行 OAuth2 授权。目前我正在扩展JwtTokenStore以将刷新令牌存储在内存中,以便我能够撤销它们。
// TODO: This is a temporary in memory solution that needs to be replaced with a concrete persistent implementation.
public class MyJwtTokenStore extends JwtTokenStore {
private List<OAuth2RefreshToken> refreshTokens;
public MyJwtTokenStore(JwtAccessTokenConverter jwtTokenEnhancer) {
super(jwtTokenEnhancer);
refreshTokens = new ArrayList<>();
}
@Override
public OAuth2RefreshToken readRefreshToken(String tokenValue) {
OAuth2RefreshToken refreshToken = super.readRefreshToken(tokenValue);
if (!refreshTokens.contains(refreshToken)) {
throw new InvalidGrantException("Invalid refresh token: " + tokenValue);
}
return refreshToken;
}
@Override
public void storeRefreshToken(OAuth2RefreshToken refreshToken, OAuth2Authentication authentication) { …Run Code Online (Sandbox Code Playgroud) 我有一个 REST API 端点,它使用多个 Feign 客户端来执行验证和处理。有问题的端点接受 POST 请求,但用于验证的 Feign 客户端接受 GET 请求。当我向 API 端点发出 POST 请求时,我从需要 GET 的 Feign 客户端收到以下错误。我的 Feign 客户端方法用 注释@GetMapping,但似乎请求仍在作为 POST 发送。如何在 POST 请求中向 Feign 客户端发出 GET 请求?
feign.FeignException: status 405 reading ValidationClient#checkData(String); content:
{"timestamp":"2018-08-06T14:43:45.998+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/"}
at feign.FeignException.errorStatus(FeignException.java:62) ~[feign-core-9.5.1.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91) ~[feign-core-9.5.1.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138) ~[feign-core-9.5.1.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-9.5.1.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-9.5.1.jar:na]
at com.sun.proxy.$Proxy129.checkFormat(Unknown Source) ~[na:na]
at com.example.datainput.DataInputController.acceptData(DataInputController.java:20) ~[classes/:na]
at sun.reflect.GeneratedMethodAccessor126.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005) ~[na:1.8.0_172]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) …Run Code Online (Sandbox Code Playgroud) 我正在使用 DATEDIFF 来确保某个操作每分钟不会发生超过一次。
SELECT COUNT(*)
FROM FOOD_ACTION
WHERE
DATEDIFF(MINUTE,INSERT_DT,GETDATE()) <= 1
Run Code Online (Sandbox Code Playgroud)
INSERT_DTGETDATE()是与返回格式相同的日期列
如果此查询返回任何内容,则不允许发生该操作。
问题是,它只是有效的。我的时间范围从一分十秒一直到近两分钟,然后才会让该动作再次发生。如果它接近一两分钟,似乎没有任何一致性,并且我已经确认GETDATE()返回的时间与我的应用程序设置列时返回的时间相同INSERT_DT。
不一致和不正确的时间是怎么回事?
在我的动态 FormGroup 中,我想以编程方式将错误附加到表单控件,但我看到添加错误的唯一方法是这样的
this.userForm.controls.username.setErrors({
'exists': 'Username already exists'
});
Run Code Online (Sandbox Code Playgroud)
这完全取代了任何现有的错误。有没有办法将单个错误附加到动态 FormGroup 控件?
java ×3
spring-boot ×3
spring ×2
amazon-ecs ×1
angular ×1
css ×1
docker ×1
html ×1
javascript ×1
jndi ×1
logback ×1
maven ×1
printing ×1
spring-cloud ×1
sql-server ×1
t-sql ×1
tomcat ×1
typescript ×1
validation ×1