给定一个URL,我想提取域名(它不应该包含'www'部分).网址可以包含http/https.这是我写的java代码.虽然它似乎工作正常,有没有更好的方法或有一些边缘情况,可能会失败.
public static String getDomainName(String url) throws MalformedURLException{
if(!url.startsWith("http") && !url.startsWith("https")){
url = "http://" + url;
}
URL netUrl = new URL(url);
String host = netUrl.getHost();
if(host.startsWith("www")){
host = host.substring("www".length()+1);
}
return host;
}
Run Code Online (Sandbox Code Playgroud)
输出:google.com
我有一个类有一个Daemon类型的对象列表.
class Xyz {
List<Daemon> daemons;
}
Run Code Online (Sandbox Code Playgroud)
我的弹簧配置看起来像这样.
<bean id="xyz" class="package1.Xyz">
<property name="daemons" ref="daemonsList">
</bean>
<bean id="daemon1" class="package1.DaemonImpl1"/>
<bean id="daemon2" class="package1.DaemonImpl2"/>
<bean id="daemonsList" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="daemon1" />
<ref bean="daemon2" />
</list>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
现在,不是在列表中显式连接每个守护进程实现,而是可以Daemon在列表中自动自动装配所有类型的bean .我试图解决的问题是,如果有人创建了一个新的Daemon类实现的bean 并忘记将其连接到列表中.
我在stackoverflow上的某个地方看到过这个问题,但是无法再找到它.为此道歉.
对这个重复的问题道歉,但我还没有找到任何令人满意的答案.大多数问题都有自己的特定用例:
Java -
thread.sleep的替代方法是否有更好的或替代方法可以跳过/避免在Java中使用Thread.sleep(1000)?
我的问题是非常通用的用例.等待条件完成.做一些操作.检查条件.如果条件不成立,请等待一段时间再进行相同的操作.
例如,考虑一种通过调用其createAPI表来创建DynamoDB表的方法.DynamoDB表需要一些时间才能变为活动状态,因此该方法会调用其DescribeTable API以定期轮询状态,直到某个时间(假设5分钟 - 由于线程调度而导致的偏差是可接受的).如果表在5分钟内变为活动状态,则返回true,否则抛出异常.
这是伪代码:
public void createDynamoDBTable(String name) {
//call create table API to initiate table creation
//wait for table to become active
long endTime = System.currentTimeMillis() + MAX_WAIT_TIME_FOR_TABLE_CREATE;
while(System.currentTimeMillis() < endTime) {
boolean status = //call DescribeTable API to get status;
if(status) {
//status is now true, return
return
} else {
try {
Thread.sleep(10*1000);
} catch(InterruptedException e) {
}
}
}
throw new RuntimeException("Table still not created");
}
Run Code Online (Sandbox Code Playgroud)
我理解通过使用Thread.sleep块当前线程,从而消耗资源.但是在一个相当中等规模的应用程序中,一个主题是一个大问题吗?
我在那里阅读使用 …
我正在尝试使用EMR/Hive将数据从S3导入DynamoDB.我的CSV文件包含用双引号括起来并用逗号分隔的字段.在hive中创建外部表时,我可以将分隔符指定为逗号但是如何指定字段用引号括起来?
如果我没有指定,我看到DynamoDB中的值填充在两个双引号""value""中,这似乎是错误的.
我正在使用以下命令来创建外部表.有没有办法指定字段用双引号括起来?
CREATE EXTERNAL TABLE emrS3_import_1(col1 string, col2 string, col3 string, col4 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '","' LOCATION 's3://emrTest/folder';
Run Code Online (Sandbox Code Playgroud)
任何建议,将不胜感激.谢谢Jitendra
hive amazon-s3 amazon-web-services amazon-emr amazon-dynamodb
假设我有一个带有简单整数计数变量的可运行对象,该变量在每次可运行对象运行时都会增加。提交此对象的一个实例,使其在预定的执行程序服务中定期运行。
class Counter implements Runnable {
private int count = 0;
@Override
public void run() {
count++;
}
}
Counter counter = new Counter();
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5);
executorService.scheduleWithFixedDelay(counter, 1, 1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
在这里,对象正在访问其在不同线程内部的内部状态(读取和递增)。此代码是线程安全的,还是count在其他线程中计划变量时丢失变量的更新?
我试图格式化Instant到String一个特定的格式.根据这里的问题格式化即时字符串,我这样做 -
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("YYYY-MM-DD'T'hh:mm'Z'")
.withZone(ZoneOffset.UTC);
// Fails for current time with error 'Field DayOfYear cannot be printed as the
// value 148 exceeds the maximum print width of 2'
LocalDateTime
.ofInstant(Instant.now(), ZoneOffset.UTC)
.format(DATE_TIME_FORMATTER);
// But works for smaller values of Instant
LocalDateTime
.ofInstant(Instant.ofEpochMilli(604800000), ZoneOffset.UTC)
.format(DATE_TIME_FORMATTER));
Run Code Online (Sandbox Code Playgroud)
有关为什么会发生这种情况的任何建议?
谢谢
我想从Java中的String中检测并删除高级ASCII字符,如®,©,™.有没有可以做到这一点的开源库?
我的hadoop作业在HDFS上生成大量文件,我想编写一个单独的线程,将这些文件从HDFS复制到S3.
任何人都可以指向任何处理它的Java API.
谢谢
为什么这段代码会抛出不可解析日期的异常?
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
f.setLenient(false);
String dateStr = "2012-03-11T02:46:01.000Z";
f.parse(dateStr);
Run Code Online (Sandbox Code Playgroud)
当宽松是真的时,它工作正常.它奇怪地适用于输入日期' 2012-03-01T02:46:01.000Z ',即使宽松为假.使用的默认时区:PST
我正在使用的静态方法之一,它做了两件事.它返回一些数据,但它也修改传递给它的参数对象.然后在代码中使用此更新的参数对象.
我正在使用PowerMock来模拟返回行为.
为了定义第二部分 - 更新输入参数,我正在定义doAnswer方法,但它不起作用.我正在尝试测试的方法看起来像这样.
public void login() throws ConnectionException, AsyncApiException {
ConnectorConfig partnerConfig = new ConnectorConfig();
//This call sets the value in one member variable 'serviceEndPoint in ParterConfig which is accessed later in this method only.
partnerConnection = Connector.newConnection(partnerConfig);
//partnerConfig.getServiceEndpoint is called.
PowerMockito.mockStatic(Connector.class);
when(Connector.newConnection(Mockito.any(ConnectorConfig.class))).thenReturn(partnerConnection);
PowerMockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
ConnectorConfig config = (ConnectorConfig) invocation.getArguments()[0];
config.setServiceEndpoint("service end point");
return null;
}
}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class)));
}
Run Code Online (Sandbox Code Playgroud)
但是上面抛出的错误说'在这里检测到未完成的短截'.
Connector是第三方课程,所以我无法控制其行为.
有什么建议,可能会出错吗?
java ×8
amazon-s3 ×2
amazon-emr ×1
concurrency ×1
datetime ×1
formatting ×1
hadoop ×1
hdfs ×1
hive ×1
java-threads ×1
mocking ×1
powermock ×1
spring ×1
string ×1
url ×1