我正在针对具有严格api速率限制的云应用程序开发一个应用程序。为了让我的团队感觉到我们在这些限制方面的差距,我想以有意义的方式计算从我们的应用程序发出的所有API调用。
我们使用Feign作为访问层,我希望能够使用RequestInterceptor来计算我们称为的不同API端点:
RequestInterceptor ri = rq -> addStatistics(rq.url());
Run Code Online (Sandbox Code Playgroud)
现在这行不通,因为生成的URL之后几乎总是计数为“ 1”,因为它们已经包含所有解析的路径变量,因此我得到了
1 - /something/id1valueverycryptic/get
1 - /something/anothercrypticidkey/get
Run Code Online (Sandbox Code Playgroud)
等等。
我希望以某种方式访问@ResuqestLine映射值(GET /something/{id}/get)或至少访问uri模板的pre-resolve(/somethine/{id}/get)
有没有办法做到这一点?
谢谢!
我有几个Java类,它们扩展了通用List接口的各种实现.它们只记录添加到List中的任何内容.
LoggingArrayList如下所示.顾名思义,它扩展了ArrayList.LoggingLinkedList类是相同的,只是它扩展了LinkedList.
我的主要目标是避免必须复制所有公共代码,以便我可以使用不同的基类.我试图尽可能地坚持DRY原则(不要重复自己).
首先,请不要建议更好的登录方式.这根本不是我的真实应用.这只是演示我遇到的问题的简单方法.
我有两个密切相关的问题.第一个是标题中的问题.如何在实现接口但不扩展另一个类的Java类中引用"超级"方法?
如下所示的LoggingArrayList类工作正常但是当我将类声明从... extends ArrayList更改为... implements List时,对super.method()的三个引用不再可调用,因此我的第一个问题.
对我的第二个问题的一个很好的答案将几乎使第一个问题没有实际意义.第二个问题是:有没有办法声明一个抽象基类,或者可能是一个扩展List的接口,使用各种add()方法的默认实现,这样我就可以简单地扩展该抽象基类或实现该接口,并且只指定什么样的List将成为具体课程的基础?
例如,我想做这样的事情:
interface LoggingList<T extends Object, L extends List<T>> extends L
{
// overloaded methods go here as shown below
// with overloaded methods declared as default for the interface
}
Run Code Online (Sandbox Code Playgroud)
...然后,我可以简单地为List的每个具体实现实现一次LoggingList,而不会复制所有公共代码.具体类可能看起来像这样,在花括号内不需要额外的代码:
public class LoggingArrayList<T extends Object> implements LoggingList<T, ArrayList<T>> {}
public class LoggingLinkedList<T extends Object> implements LoggingList<T, LinkedList<T>> {}
Run Code Online (Sandbox Code Playgroud)
问题是,我提出的接口定义是无效的(不会编译),并且,除非我使LoggingList成为抽象子类而不是接口,否则下面显示的代码中对super.method的引用是不可用的然后我回到了现在的位置.
提前感谢有关如何实现我的DRY目标的任何想法.
这是我的整个LoggingArrayList类.
public abstract class LoggingArrayList<T extends Object>
extends ArrayList<T>
{
protected void log(T e)
{
System.out.println(e == null …Run Code Online (Sandbox Code Playgroud) java generics inheritance design-patterns generic-collections
所以我有这样的桌子
CREATE TABLE Table_Status
(
Status VARCHAR(10) NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
数据如下所示,StartTime 和 Endtime 是连续的时间跨度:
Status1 2007-10-16 18:38:25.000 2007-10-17 05:30:22.000
Status2 2007-10-17 05:30:22.000 2007-10-17 18:48:46.000
Status2 2007-10-17 18:48:46.000 2007-10-17 21:48:46.000
Status1 2007-10-17 21:48:46.000 2007-10-18 08:11:59.000
Run Code Online (Sandbox Code Playgroud)
所以想法是在任何时间段内 SELECT *,如果用户传递两个参数
SET @From = '2007-10-17 00:00:00.000'
SET @To = '2007-10-17 23:59:59.000'
Run Code Online (Sandbox Code Playgroud)
不知怎的,它应该返回这样的表:
Status1 2007-10-17 00:00:00.000 2007-10-17 05:30:22.000
Status2 2007-10-17 05:30:22.000 2007-10-17 21:48:46.000
Status1 2007-10-17 21:48:46.000 2007-10-17 23:59:59.000
Run Code Online (Sandbox Code Playgroud)
你看,棘手的部分是将原始时间跨度削减为用户定义的时间跨度(@From - @To),我一整天都在努力解决这个问题。请指教。
提前非常感谢!
我正在使用org.apache.httpcomponents.httpclient发送带有cookie的http请求:
```
URI uri = new URIBuilder().setScheme("https").setHost("api.weibo.com").setPath("/oauth2/authorize").setParameter("client_id","3099336849").setParameter("redirect_uri","http://45.78.24.83/authorize").setParameter("response_type", "code").build();
HttpGet req1 = new HttpGet(uri);
RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build();
req1.setConfig(config);
req1.setHeader("Connection", "keep-alive");
req1.setHeader("Cookie", cookie);
req1.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36");
response = httpclient.execute(req1);
Run Code Online (Sandbox Code Playgroud)
```
我在Google上搜索了很多,并尝试启用/禁用自动重定向,但是它似乎对我不起作用。
当我尝试使用发送电子邮件时,出现以下错误javax.mail-api:
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "javax/mail/Session"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279)
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.sun.mail.util.PropUtil.getBooleanSessionProperty(PropUtil.java:86)
at javax.mail.internet.MimeMessage.initStrict(MimeMessage.java:320)
at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:195)
at sendEmail(manage.java:216)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)
at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)
at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)
Run Code Online (Sandbox Code Playgroud)
码:
Public void sendEmail() {
String to = "abc@abc.com";
String from = "efg@efg.com";
final String username = "abc@abc.com";
final …Run Code Online (Sandbox Code Playgroud) 以下代码在java中的Class String中.我不明白为什么两个不同字符串中的字符被比较两次.首先做大写,如果失败则做小写.
我的问题是,是否需要?如果是,为什么?
public static final Comparator<String> CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator();
private static class CaseInsensitiveComparator
implements Comparator<String>, java.io.Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 8575799808933029326L;
public int compare(String s1, String s2) {
int n1 = s1.length();
int n2 = s2.length();
int min = Math.min(n1, n2);
for (int i = 0; i < min; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if (c1 != c2) {
c1 …Run Code Online (Sandbox Code Playgroud) 正如标题所示,我有一些代码包含在一个while(true)无限循环中,并且所有代码都被完全捕获try并catch阻塞.这个线程是在main方法中启动的,但是,经过长时间运行,当我使用jstack检查并导致工作累积时,这个工作线程会神秘地消失.
以下是我的代码:
public void run() {
while (true) {
try {
// Consumer consumes from Kafka server
Global.KAFKA_METRIC_DATA_CONSUMER.consume(topic, handler);
} catch (Exception e) {
logger.error("Kafka consumer process was interrupted by exception!");
} finally {
try {
// Prevent restart too often
Thread.sleep(30 * BaseConst.SECOND);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这个结构将保持线程运行,因此是消费者.即使consume()方法失败,它也会无限重启.但是,正如我上面提到的,整个线程无声地消失,没有任何错误日志.有人能提供一些线索吗?
一些可能有用的信息:
java multithreading jvm memory-management kafka-consumer-api
有谁知道一个简单的telnet服务器?
我想嵌入我的应用程序并设置我自己的命令简单而不复杂.
我有一个类,它读取文件并使用扫描仪接收用户输入,如果扫描仪等于该文件中一行的一部分,它将显示来自同一行的字符串。
我将如何为此创建一个 Junit 测试方法?
这是我想要测试方法的一些代码:
Scanner Input = new Scanner(System.in);
String name = Input.nextLine();
BufferedReader br;
try{
br = new BufferedReader(new FileReader(new File(filename)));
String nextLine;
while ((nextLine = br.readLine()) != null)
{
if (nextLine.startsWith("||"))
{
int f1 = nextLine.indexOf("*");
int f2 = nextLine.indexOf("_");
fName = nextLine.substring(f1+1, f2);
if (name.equals(fname))
{
String[] s1 = nextLine.split("_");
String sName = s1[1];
System.out.println(sName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的数据文件看起来像这样
||
*Jack_Davis
*Sophia_Harrolds
Run Code Online (Sandbox Code Playgroud)
我曾尝试在我的测试方法中使用此代码
@Test
public void testgetSurname() {
System.out.println("get surname");
String filename = "";
String expResult …Run Code Online (Sandbox Code Playgroud) 有谁知道如何从看起来像 "01:20" -> 1:20AM 和 "21:20" -> 9:20PM 的字符串中解析时间(小时、分钟和 AM/PM)?大多数解决方案似乎都假设或需要 Date 或 Calendar 对象。
我的输入时间实际上来自 TimePickerDialog(特别是这个 MaterialDateTimePicker 实现,所以我只收到小时、分钟和秒(整数)。
我希望能够以友好的方式格式化用户选择的时间,即 12:30PM、02:15AM 等。
我正在尝试使用 Joda 时间:
fun formattedTime(timeStr: String): String {
// Get time from date
val timeFormatter = DateTimeFormat.forPattern("h:mm a")
val displayTime = timeFormatter.parseLocalTime(timeStr)
return displayTime.toString()
}
Run Code Online (Sandbox Code Playgroud)
但是我在输入字符串(例如“1:20”)时收到此错误:
java.lang.IllegalArgumentException: Invalid format: "1:20" is too short
我也研究过SimpleDateFormat但它似乎需要一个完整的日期时间字符串,例如在这个相关问题中
java ×9
comparator ×1
email ×1
generics ×1
http ×1
inheritance ×1
jakarta-mail ×1
jodatime ×1
junit ×1
jvm ×1
maven ×1
spring-boot ×1
sql ×1
sql-server ×1
string ×1
telnet ×1
unicode ×1