我已经安装了OpenJDK 11.0.1,当我尝试使用mvn install运行我的应用程序时,我收到以下错误,我已经通过将javax.xml.bind添加到我的pom.xml中添加了必要的依赖项作为修复,但它没有似乎工作,任何人都面临这个问题?我还需要做其他事吗?我的mvn --version返回此
Maven home: /usr/local/Cellar/maven/3.5.2/libexec
Java version: 11.0.1, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
Default locale: en_GB, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.2", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)
我添加这个,但没有解决问题
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这就是我得到的
[INFO] --- maven-failsafe-plugin:2.20:integration-test (failsafe-integration-tests) @ name-sample-test ---
[WARNING] Error injecting: org.apache.maven.plugin.failsafe.IntegrationTestMojo
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3138)
at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2358)
at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:1006)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1038)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001) …Run Code Online (Sandbox Code Playgroud) 这是我尝试过的,但我的名字字段为空
@Data
@NoArgsConstractor
@AllArgsConstructor
public class User{
@JsonProperty("name")
private String name;
@JsonProperty("age")
private int age;
private String firstName;
public void setFirstName(String name){
this.firstName = this.name.substring(4,10);
}
}
Run Code Online (Sandbox Code Playgroud)
假设我有 json 想要映射到上面的 POJO,问题是我想对 name 和 firstName 使用 @JsonProperty("name") ,但设置 firstName 略有不同。
我的Spring Boot日志当前如下所示。
{"@timestamp":"2018-08-07T14:49:21.244+01:00","@version":"1","message":"Starting Application on ipkiss bla bla)","logger_name":"logger name....","thread_name":"main","level":"INFO","level_value":20000}
Run Code Online (Sandbox Code Playgroud)
使用如下的logback-spring.xml设置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.ipkiss.correlate.logback.CorrelationPatternLayoutEncoder">
<pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} id = %id %m%n%wEx</pattern>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
和我的LayoutEncoder类看起来像这样
public class CorrelationPatternLayoutEncoder extends PatternLayoutEncoder {
public CorrelationPatternLayoutEncoder() {
}
@Override
public void start() {
PatternLayout patternLayout = new PatternLayout();
patternLayout.getDefaultConverterMap().put("id", CorrelationConverter.class.getName());
patternLayout.setContext(context);
patternLayout.setPattern(getPattern());
patternLayout.setOutputPatternAsHeader(outputPatternAsHeader);
patternLayout.start();
this.layout = patternLayout;
this.started = true;
}
Run Code Online (Sandbox Code Playgroud)
}
我想要达到的目的是将id添加到日志中,我无法使logstach附加我的id,我根据文档尝试了Custom(自定义)字段,但我无法使其正常工作,我有什么想法可以实现?
这就是我要结束的
{"id":"3a7ccd34-d66a-4fcc-a12e-763a395a496c","@timestamp":"2018-08-07T14:49:21.244+01:00","@version":"1","message":"Starting Application on ipkiss bla bla)","logger_name":"logger name....","thread_name":"main","level":"INFO","level_value":20000}
Run Code Online (Sandbox Code Playgroud)
或ID附加在日志末尾。
我正在尝试监视已登录的用户,我通过调用api获取已登录的用户信息,这是我使用的代码,
public class MonitorService {
private InfoCollectionService infoService;
public MonitorService(InfoCollectionService infoService) {
this.infoService = infoService
}
@Scheduled(fixedDelay = 5000)
public void currentLoggedInUserMonitor() {
infoService.getLoggedInUser("channel").forEach(channel -> {
Metrics.gauge("LoggedInUsers.Inchannel_" + channel.getchannelName(), channel.getgetLoggedInUser());
});
}
}
Run Code Online (Sandbox Code Playgroud)
我在Prometheus中看到了值,问题出在几秒钟后,该值变成NaN,我已经读到千分尺用WeakReference(因此收集了垃圾)包装了它们的obj输入,我不知道如何解决它。如果有人知道如何解决这个问题,那就太好了。
所以我的桌子看起来像这样
{"@timestamp":"2018-08-08T09:21:57.947+00:00","@version":"1","message":"bla bla"}
Run Code Online (Sandbox Code Playgroud)
例如,我可以使用如下的 json 函数提取消息部分
JSON_EXTRACT_SCALAR(log,'$.message') AS message
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以相同的方式提取时间戳时
JSON_EXTRACT_SCALAR(log,'$.@timestamp') AS timestamp
Run Code Online (Sandbox Code Playgroud)
我收到错误“错误:JSONPath 中不支持的运算符:@”有关正确语法的任何想法?
我有一个字符串列表。我想搜索给定的查询字符串并说我只想要前 10 个匹配的字符串。这是我尝试过的,第一个完全符合我的要求。
我想知道是否有一种简洁的写作方式。
fun search(query: String): ArrayList<String> {
val found = ArrayList<String>()
for (i in terms.indices) {
if (terms[i].contains(query)) {
found.add(terms[i])
}
if (found.size == 10) {
break
}
}
return found
}
Run Code Online (Sandbox Code Playgroud)
我想使用这个,但正如你所看到的,它不像上面的那样有效,因为它贯穿了整个列表
fun search2(query: String): List<String> {
return terms.filter { it.contains(query) }.take(10)
}
Run Code Online (Sandbox Code Playgroud) 我有以下 json
{
"CustomerId": "B0001",
"Items": [
{
"ItemId": "00001",
"ItemName": "Banana"
},
{
"ItemId": "00001",
"ItemName": "Orange"
},
{
"ItemId": "00001",
"ItemName": "apple"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想计算在这种情况下的项目数,该列应该返回 3 我已经尝试过
select ARRAY_LENGTH(Items) as Number_of_items2
Run Code Online (Sandbox Code Playgroud)
但这显然会在 bigquery 上引发错误